C# Linq-实体或子实体中的搜索字符串

C# Linq-实体或子实体中的搜索字符串,c#,linq,C#,Linq,我有供应商和项目的实体,其中供应商与项目有一对多的关系 我需要同时搜索两个字符串,以便搜索结果将返回以下内容: 名称包含搜索字符串的所有供应商及其所有项目 拥有名称包含搜索字符串的项目的所有供应商 到目前为止,我一直在用两个列表,然后做一个联合: var suppliers = repository.Suppliers.Where (s => s.Name.Contains(searchString)).Include(Items); var itemSuppliers =

我有供应商和项目的实体,其中供应商与项目有一对多的关系

我需要同时搜索两个字符串,以便搜索结果将返回以下内容:

  • 名称包含搜索字符串的所有供应商及其所有项目
  • 拥有名称包含搜索字符串的项目的所有供应商
  • 到目前为止,我一直在用两个列表,然后做一个联合:

    var suppliers = repository.Suppliers.Where
           (s => s.Name.Contains(searchString)).Include(Items);
    
    var itemSuppliers = repository.Suppliers.Include(Items).Where
                    (s => s.Items.Any(i => i.Name.Contains(searchString));
    
    有没有更好的方法,最好是一个查询

    多谢各位

    repository.Suppliers.Include(Items).Where(s => s.Name.Contains(searchString) || s.Items.Any(item => item.name.Contains(searchString)));
    
    希望对你有帮助


    希望它能帮助你。

    第二句话有两个意义。我想知道它是否编译了?第二个语句有两个位置。我想知道它是否编译好了?谢谢!如果可以的话,请继续:Include是否首先加载所有项目,然后对其进行过滤,或者将查询发送到DB?@YevgeniGrinberg:只要您没有对其进行迭代或序列化,它将作为一个查询保留(完全安全)查询中的一个小问题:当它找到至少一个包含searchString的项目时,它为供应商返回所有项目。如何让它只返回相应的项目?@YevgeniGrinberg:我想你之前的查询也有同样的问题。没有办法排除Include查询中的项(只是急于加载实体)。您需要在select查询中筛选出结果。谢谢!如果可以的话,请继续:Include是否首先加载所有项目,然后对其进行过滤,或者将查询发送到DB?@YevgeniGrinberg:只要您没有对其进行迭代或序列化,它将作为一个查询保留(完全安全)查询中的一个小问题:当它找到至少一个包含searchString的项目时,它为供应商返回所有项目。如何让它只返回相应的项目?@YevgeniGrinberg:我想你之前的查询也有同样的问题。没有办法排除Include查询中的项(只是急于加载实体)。您需要在select查询中筛选出结果。