Linq-如何从只包含另一个列表的项目的列表中选择项目
本文关键字:列表 项目 选择 另一个 包含 Linq- | 更新日期: 2023-09-27 18:19:45
我有两个类:
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。有什么想法吗?
这将返回所有状态都在stateList
中的项,我认为这就是您所需要的:
Items.Where(x => x.TestList.All(s => stateList.Contains(s.State)));
如果您只需要那些TestList只有状态为2:的项目
tems.Where( i => i.TestList.All(li => li.State == 2))
我有类似的问题:
这是代码:
List<string> mds = _userService.GetAllMDUsers();
conf = _context.BillingsConfirmationsView.Where(c=> mds.Contains(c.EmployeeShort.ToUpper()));
我对以下情况有意见。比方说,我有一个员工;js";在我的mds列表中,我有另一个jsc很短的员工。现在我得到了两个员工的记录,我应该只得到jsc的记录,因为js不是mds的模因。现在我明白了,这是因为";js";是"的子集;jsc";但不知道如何得到正确的结果。EmployeeShort是BillingsConfirmationsView模型中的字符串。
Ivan