2010-09-02 49 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