LINQ包含在列表中的列表中

时间:2016-03-16 17:12:50

标签: c# linq

我试图在列表中的列表中使用包含但却被困在这个列表中:

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声明无效。

感谢您的帮助!

1 个答案:

答案 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; }
}