我有这两个类:
public class Item
{
public int Id{get;set;}
public List<Test> TestList{get;set;}
}
public class Test
{
public int Id{get;set;}
public Item Item{get;set;}
public byte State{get;set;}
}
项目类别数据:
Id
1
2
3
测试类数据:
Item State
1 1
1 2
1 3
2 1
2 4
3 2
现在我需要编写一个查询,从我的类中选择只有状态1和2的Items。例如,对于上面的示例,它应该返回Item = 3的行。 我写了这个问题:
var stateList=new List<byte>(){1,2};
Items.Where(x => x.TestList.Select(c => c.State).Any(s => stateList.Contains(s)));
但它也返回Item = 1。任何想法?
答案 0 :(得分:18)
这将返回stateList
中所有州的项目,我认为这就是您所需要的:
Items.Where(x => x.TestList.All(s => stateList.Contains(s.State)));
答案 1 :(得分:4)
如果您只需要TestList只有状态为2的项目的项目:
tems.Where( i => i.TestList.All(li => li.State == 2))