簡體   English   中英

帶有linq表達式的數據表的左外部聯接?

[英]Left outer join of datatable with linq expression?

我有兩個DataTable

DataTable dtFields = new DataTable("tmpFieldTable");                
dtFields.Columns.Add("FieldID");
dtFields.Columns.Add("CDGroupID");
dtFields.Columns.Add("CDCaption");
dtFields.Columns.Add("fldIndex");

DataTable dtCDGroup = new DataTable("tmpCDGroup");               
dtCDGroup.Columns.Add("CDGroupID");
dtCDGroup.Columns.Add("Name");
dtCDGroup.Columns.Add("Priority");

我正在使用以下LINQ表達式來聯接這些表:

var resultList = dtFields.AsEnumerable()
                         .Join(dtCDGroup.AsEnumerable(),
                               fieldList => fieldList.Field<string>("CDGroupID"),
                               cd => cd.Field<string>("CDGroupID"),
                               (fieldList, cd) => new
                               {
                                   FieldID = fieldList.Field<string>("FieldID"),
                                   CdGroup = cd.Field<string>("Name"),
                                   CDCaption = fieldList.Field<string>("CDCaption"),
                                   Priority = (cd.Field<string>("Priority") ?? "99"),
                                   fldIndex = fieldList.Field<string>("fldIndex").ToString()
                               })
                         .OrderBy(result => result.Priority)
                         .ThenBy(result => result.fldIndex);

如何使用這些DataTable執行左外部DataTable

左聯接不是本地使用lambda表達式提供的。 但是您可以使用GroupJoin和SelectMany方法來實現。

var result = new string[] { "A", "B" }.GroupJoin(new string[] { "B" }, l => l, r => r, (l, r) => new { l, r }).ToList();
            Console.WriteLine(result.Count());

這將導致result [0] .r.Count()= 0和result [1] .r.Count()= 1。

希望這會有所幫助。

問候。

只需將DefaultIfEmpty()添加到表中:

resultList = dtFields.AsEnumerable() 
                     .Join(dtCDGroup.AsEnumerable().DefaultIfEmpty(), 
                           fieldList => fieldList.Field<string>("CDGroupID"), 
                           cd => cd.Field<string>("CDGroupID"), 
                           (fieldList, cd) => new 
                           { 
                               FieldID = fieldList.Field<string>("FieldID"), 
                               CdGroup = cd.Field<string>("Name"), 
                               CDCaption = fieldList.Field<string>("CDCaption"), 
                               Priority = (cd.Field<string>("Priority") ?? "99"), 
                               fldIndex = fieldList.Field<string>("fldIndex").ToString() 
                           }) 
                     .OrderBy(result => result.Priority) 
                     .ThenBy(result => result.fldIndex);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM