我试图在列表中的列表中使用包含但却被困在这个列表中:
var postFilter = PredicateBuilder.False<Company>();
// Loop through each word and see if it's in the company's facility
foreach (var term in splitSearch)
{
var sTerm = term.Trim();
postFilter = postFilter.Or(x =>
x.Facilities.Contains(y=>
y.Facility.Name.ToUpper().Contains(sTerm)) ||
x => x.Facilities.Contains(y =>
y.Facility.Description.ToUpper().Contains(sTerm)));
}
Postfilter是一个公司列表,一家公司有一个公司设施清单,这是一个1:m的关系。设施与该表的关系也是1:m。因此x代表公司设施对象。 y应代表设施对象。
(因此公司可以拥有许多设施,设施可以属于许多公司。在我之间使用公司设施表获取该公司设施的其他信息 - 例如,特定公司可以拥有一个直径的车床表300其他公司将达到250的直径,因此将表格放在其间是很重要的)
我想返回在设施名称或设施描述中有sTerm的公司,但这个linq声明无效。
感谢您的帮助!
答案 0 :(得分:1)
这是LINQ和一些示例代码:
void Main()
{
List<Company> postFilter = new List<UserQuery.Company>();
var sTerm = "XXX".Trim().ToUpper();
postFilter = postFilter.Where(x =>
x.Facilities.Any(f => f.Name.ToUpper().Contains(sTerm)
|| f.Description.ToUpper().Contains(sTerm))).ToList();
}
public class Company
{
public string CompanyName { get; set; }
public List<Facility> Facilities { get; set; }
}
public class Facility
{
public string Name { get; set; }
public string Description { get; set; }
}