使用linq-to-sql查询连接列表

fre*_*hie 8 c# linq

我有MyObject的列表,如下所示:

public class MyObject{
  public int FruitID {get;set;}
  public string FruitName {get;set;}
}

List<MyObject> TheList = new List<MyObject>();
Run Code Online (Sandbox Code Playgroud)

此列表使用linq-to-sql查询填充.我想在这个列表和一个包含FruitID作为其外键的表之间创建一个连接.

HarvestTimes表看起来像这样:

FruitID   |   HarvestDatetime  |   RipeFactor
   3      |        3/4/2011    |       2
   3      |        4/5/2011    |       4
   3      |        5/5/2011    |       3
   4      |        3/21/2011   |       2
   4      |        4/10/2011   |       2
   4      |        5/10/2011   |       2
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

var TheQuery = (from list in TheList
                join fruit in MyDC.HarvestTimes on
                list.FruitID equals fruit.FruitID
                where ....
                select new MyObject{... }).ToList();
Run Code Online (Sandbox Code Playgroud)

我对Where子句有些麻烦.我如何只获得RipeFactor总是为2的 Fruit .例如,Fruit 3的RipeFactor为2,但也有4,而只有Fruit4只有2.我尝试使用Contains,但两种水果都出现了.

谢谢你的建议.

Fra*_*sco 3

假设表 HaverstTime 和 Fruit 之间存在关系:

var TheQuery = MyDC.HarvestTimes
    .Where(p => TheList.Select(q => q.FruitID).Contains(p.FruitID))
    .GroupBy(p => p.Fruit)
    .Where(p => p.All(q => q.RipeFactor == 2))
    .Select(p => p.Key);
Run Code Online (Sandbox Code Playgroud)

这将创建一个IEnumerable<Fruit>我认为可以轻松转换为 MyObject 的对象。

更新:哎呀我忘了添加 TheList.Select(q => q.FruitID)。这就是它没有编译的原因。抱歉=)

Update2:做同样的事情,考虑 Ripefactor = 2 和 3

var TheQuery = MyDC.HarvestTimes
    .Where(p => TheList.Select(q => q.FruitID).Contains(p.FruitID))
    .GroupBy(p => p.Fruit)
    .Where(p => p.All(q => q.RipeFactor == 2 || q.RipeFactor == 3))
    .Select(p => p.Key);
Run Code Online (Sandbox Code Playgroud)