2011-11-07 7 views
0

LINQ를 사용하여 LINQ를 SQL 데이터베이스에 연결하고 로컬 XML 데이터 집합을 데이터 집합에 사용하는 SQL 데이터베이스가 있습니다. "tblDoc : sourcePath, document : xmlLink"키의 SQL 테이블 "tblDoc"및 데이터 세트 테이블 "document"에서 외부 왼쪽 조인을 수행해야합니다. 두 키 모두 불행히도 문자열입니다. 아래에있는 코드는 결과를 반환하지 않으며 몇 가지 변형을 시도했지만 LINQ 기술은 제한적입니다. 누구든지 시도 할 대안이나 제안이 있습니까?LINQ to SQL을 LINQ to DataSet에 연결합니다.

DataColumn xmlLinkColumn = new DataColumn(
    "xmlLink",System.Type.GetType("System.String")); 
xmlDataSet.Tables["document"].Columns.Add(xmlLinkColumn); 
foreach (DataRow xmlRow in xmlDataSet.Tables["document"].Rows) 
{ 
    xmlRow["xmlLink"] = (string)xmlRow["exportPath"] + 
     (string) xmlRow["exportFileName"];    
} 

var query = 
    from t in lawDataContext.tblDocs.ToList() 
    join x in xmlDataSet.Tables["Document"].AsEnumerable() 
    on t.SourceFile equals (x.Field<string>("xmlLink")) 
    select new 
    { 
     lawID = t.ID, 
     xmlID = x == null ? 0 : x.Field<int>("id") 
    };  

foreach (var d in query.ToArray()) 
{ 
    Debug.WriteLine(d.lawID.ToString() + ", " + d.xmlID.ToString()); 
} 

답변

1

join 절은 표준 내부 결합 동작을 생성합니다. 외부 참여를 얻으려면 DefaultIfEmpty() 확장 방법을 사용해야합니다.

var query = from t in lawDataContext.tblDocs.ToList() 
      join x in xmlDataSet.Tables["Document"].AsEnumerable() 
       on t.SourceFile equals (x.Field<string>("xmlLink")) 
       into outer 
      from o in outer.DefaultIfEmpty() 
      select new 
      { 
       lawID = t.ID, 
       xmlID = o == null ? 0 : o.Field<int>("id") 
      }; 
+0

감사합니다! 결과에서 xmlID에 대해 여전히 null 값을 얻고 있습니다. :(문자열 값에 대해 "equals"를 사용하려고했기 때문에 그렇습니까? –

+0

왼쪽 외부 조인을 할 때'null' 값을 갖습니다. "저에게 * ALL * 테이블 및 해당 테이블의 해당 값을 반환합니다. LINQ 쿼리의 익명 형 프로젝션에서'xmlID = null'으로 끝나야한다는 것을 의미합니까? –