2010-10-21 92 views
3

在這裏,我我的情景如何左連接兩個Datables?

我必須首先確定年代:表A

SerialNumber PartNumber 
    001    A 
    002    B 

     var TableA = (from p in ddata.AsEnumerable() 
       join q in Select.AsEnumerable() 
        on p.Field<string>("SerialNumber") equals q.Field<string>("SerialNumber") 
        select new 
        { 
         SerialNUmber = q["SerialNumber"], 
         PartNumber = q["PartNumber"], 
         UnitStatus = "HOT" 
       }).ToList(); 

二表:表B

SerialNumber PartNumber 
001    A 
002    B 
003    C 
004    D 

    var merger = (from w in ddata.AsEnumerable() 
           select new 
           { 
            SerialNUmber = w["SerialNumber"], 
            PartNumber = w["PartNumber"], 
            UnitStatus = "COLD" 
           }).ToList(); 

要求:

加入的兩個DataTable和顯示結果情況下,如果連續出版物等於兩個表,則狀態爲熱其他正常。

SerialNumber PartNumber Status 
001    A   HOT 
002    B   HOT 
003    C   NORMAL 
004    D   NORMAL 

這是可能的嗎?感謝Regrads?

回答

1

雖然我使用'相交','除外'和'聯盟'而不是左連接,但這絕對是可能的。我希望是可以接受的:

var both = list1.Intersect(list2); 
var ret = both 
       .Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "HOT" }) 
       .Union(
        list1.Union(list2).Distinct() 
         .Except(both) 
         .Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "NORMAL" }) 
      ) 

LinqPad測試:

var list1 = new [] { 
new { SerialNumber = 1, PartNumber = "A" }, 
new { SerialNumber = 2, PartNumber = "B" }, 
}; 

var list2 = new [] { 
new { SerialNumber = 1, PartNumber = "A" }, 
new { SerialNumber = 2, PartNumber = "B" }, 
new { SerialNumber = 3, PartNumber = "C" }, 
new { SerialNumber = 4, PartNumber = "D" }, 
}; 

var both = list1.Intersect(list2); 
both 
    .Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "HOT" }) 
    .Union(
     list1.Union(list2).Distinct() 
      .Except(both) 
      .Select(x => new { SerialNumber = x.SerialNumber, PartNumber = x.PartNumber, Status = "NORMAL" }) 
    ) 
.Dump(); 

返回:

SerialNumber PartNumber Status 
1   A   HOT 
2   B   HOT 
3   C   NORMAL 
4   D   NORMAL 
+0

'System.Collections.Generic.IEnumerable ' 不包含定義'轉儲'和沒有擴展方法'轉儲'接受類型'System.Collections.Generic.IEnumerable '的第一個參數可以找到(你是否缺少使用指令或程序集引用?) – Crimsonland 2010-10-22 05:34:39

+0

轉儲是一個在程序linqpad(http://www.linqpad.net/)中可用的對象擴展方法,該方法在控制檯風格窗口中顯示有關對象的信息。 Linqpad是一個快速創建linq和linq到sql腳本的工具,如果你願意的話,它可以是一個迷你IDE。你不需要它,這就是爲什麼我先發布了相同的代碼,而沒有在linq測試上面的'Dump()'調用。只要擺脫'轉儲()'的呼籲,它應該工作正常。 – diceguyd30 2010-10-22 12:09:51