我有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,但两种水果都出现了.
谢谢你的建议.
假设表 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)
| 归档时间: |
|
| 查看次数: |
15346 次 |
| 最近记录: |