GUIDS가있는 DataTable Select ()
문제
LINQ 쿼리에서 반환되는 데이터 테이블에서 런타임에서 내 트리 뷰를 보조하려고합니다. 반환 된 필드는 다음과 같습니다.
이름 = casenoteid | ContactDate | ParentNote Type = Guid | DateTime | 안내
ParentNote 필드는 Casenoteid 열의 항목과 일치합니다. Select (필터)는 나에게 런타임 오류를 제공합니다. 열 [EA8428E4]을 찾을 수 없습니다. 그 영숫자는지도 중 하나의 첫 번째 섹션입니다. 내 코드 필터 =를 밟을 때 "ParentNote=ea8428e4-1274-42e8-a31c-f57dc2f189a4"
내가 무엇을 놓치고 있습니까?
var tmpCNoteID = dr["CaseNoteID"].ToString();
var filter = "ParentNote="+tmpCNoteID;
DataRow[] childRows = cNoteDT.Select(filter);
해결책
단일 따옴표로 안내서를 둘러보십시오.
var filter = "ParentNote='"+tmpCNoteID+"'";
다른 팁
이것은 작동해야합니다 :
var tmpCNoteID = dr["CaseNoteID"].ToString();
var filter = "ParentNote=\""+tmpCNoteID+"\"";
DataRow[] childRows = cNoteDT.Select(filter);
나는 이것이 오래된 스레드라는 것을 알고 있지만 부록을 추가하고 싶었습니다. Guid (예 : ParentNote In (, 등))과 함께 IN 연산자를 사용하면 더 이상 인용이 허용되지 않습니다. 이 경우 변환 방법 (granadacoder가 제안)이 필요합니다. (단일 따옴표는 안내서를 문자열과 '='연산자와 비교하는 것에 대한 예외가 발생합니다.
세부: 형식으로 큰 필터 문자열을 구축 한 일부 레거시 코드를 상속했습니다. MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222-3333-4444-555555555555' ....
안내 수 (따라서 조항 수)가 너무 커질 때 스택 오버플로 예외가 발생했습니다. 수많은 조항을 IN 절로 교체함으로써 예외없이 필터를 설정할 수있었습니다. 그러나 CONC를 사용한다는 것은 변환 접근법을 사용해야한다는 것을 의미합니다.
다음은 내가 사용하는 한 가지 방법입니다.
MyStrongDataSet ds = new MyStrongDataSet();
Guid myUuid = new Guid("11111111-2222-3333-4444-555555555555");
System.Data.DataRow[] rows = ds.MyStrongTable.Select("MyGuidProperty = (CONVERT('" + myUuid.ToString("N") + "', 'System.Guid'))");
//Fish out a single row if need be and cast to a strong row
if (null != rows)
{
if (rows.Length > 0)
{
MyStrongDataSet.MyStrongTableRow returnRow = rows[0] as MyStrongDataSet.MyStrongTableRow;
return returnRow;
}
}
return null;
여기에 약간의 변형이 있습니다.
string filterSql = "MyGuidProperty ='{0}'";
filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));