2010-09-02 68 views
2

我正在苦苦掙扎,所以任何幫助都會受到感激。LINQ加入多個條款從哪裏可以獲得幫助

我有以下LINQ是拉回數據的列表:

public static List<tblWeight> GetWeights(string memberid, string locationid, string buyer, string subcategory, string product) 
     { 

      MyEntity getweights = new MyEntity(); 

      var r = (from p in getweights.tblWeights 
        where p.MemberId == memberid && 
           p.LocationId == locationid 
        select p); 

      if (buyer != "Not Specified") 
       r = r.Where(p => p.UnitUserField1 == buyer); 

      if (subcategory != "Not Specified") 
       r = r.Where(p => p.UnitUserField2 == subcategory); 

      if (product != "Not Specified") 
       r = r.Where(p => p.IDDesc == product); 

      return r.ToList(); 
     } 

可愛!

我現在想要做的是基於這個結果集和單位ID(IDDesc),然後我去tblPurchase,從tblPurchases中拉出幾列並對列進行分組。

因此,例如,我們有tblWeight看起來像這樣:

MemberID LocationID Buyer SubCategory IDDesc 
1   1   Cat1 Sub1  ab 
1   1   Cat1 Sub1  abc 
1   1   Cat1 Sub2  abcd 

用戶進行搜索Sub1的在子類和上述LINQ是卓有成效的,並從上面拉回到前兩排。精細。

我需要的LINQ現在要做的就是去tblPurchases:

MemberID LocationID IDDesc SupplierID SupplierStatus 
1   1   ab  Sup1   Live 
1   1   abc  Sup1   Live 
1   1   abcd  Sup2   Dead 

然後所以它加入了MEMBERID,LocationID和IDDesc只是選擇tblPurchases拉回以下結果。

SUP1直播(或tblPurchases所有列,只是分組/不同)

我試圖在添加一個連接並對但無論有多少種不同的變化,我還是遇到厄運的紅色波浪線! !

如果有人可以幫忙,啤酒/吻再次提供。

+0

禁止表內的人爲錯誤滑倒,這應該永遠不會發生。供應商將始終擁有單一的個人身份。 – 2010-09-02 11:31:56

回答

2

下面的LINQ查詢應該做你想要什麼:

var result = from w in tblWeight 
      where w.SubCategory == "Sub1" 
      join p in tblPurchases on 
       new { w.MemberID, w.LocationID, w.IDDesc } equals 
       new { p.MemberID, p.LocationID, p.IDDesc } 
      group p by new { p.SupplierID, p.SupplierStatus } into pg 
      select pg.Key; 

變量result是包含SupplierIDSupplierStatus元組的列表。

如果你還想把條件部分放在那裏,它會變得更復雜一點。以下是如何做到這一點:

​​
+0

感謝您對我的羅納德 - 迄今爲止的頂級的東西。我對你答案的「尚未」部分持樂觀態度。這是真正拋出我的部分的條件。 – 2010-09-02 12:07:08

+0

我添加了額外的東西,允許你做有條件的地方,也加入和分組。我會跳過吻,但我會留下一個地址發送啤酒;) – 2010-09-02 12:14:35

+0

*在這裏插入咒罵*我永遠不會接近得到這個! 天才羅納德...如果它的工作; )謝謝你爲我着想。 – 2010-09-02 12:17:30