LINQ过滤器集合在其子集合中提交

时间:2016-11-24 11:59:17

标签: linq linq-to-entities

我已定义以下类:

public class AssignmentDictionaryDTOChildItem
{
    public int id { get; set; }
    public string text { get; set; }
}

public class AssignmentDictionaryDTO
{
    public string BatchName { get; set; }
    public List<AssignmentDictionaryDTOChildItem> ChildItems { get; set; }
}

并将模型作为AssignmentDictionaryDTO类型的列表。

现在我想通过文本字段过滤我的模型(来自AssignmentDictionaryDTOChildItem)

model = model.Where( x => x.ChildItems.SelectMany( y => y.text.ToLower().Contains( q ), z => z ) );

但它没有编译 - 抛出异常

The type arguments for method 'System.Linq.Enumerable.SelectMany<TSource,TCollection,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,System.Collections.Generic.IEnumerable<TCollection>>, System.Func<TSource,TCollection,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我知道,上面查询中的z是AssignmentDictionaryDTOChildItem类型,我的模型是AssignmentDictionaryDTO类型列表,所以它不适合。 那么如何修复我的查询以实现上面提到的过滤?

1 个答案:

答案 0 :(得分:1)

怎么样:

model = model.Where(x => x.ChildItems.All(y => y.text.ToLower().Contains(q))).ToList();
//or Any instead of All