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。有什么想法吗?

Linq-如何从只包含另一个列表的项目的列表中选择项目

这将返回所有状态都在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