根据EF核心中的ICollection进行过滤

时间:2018-06-27 18:16:29

标签: linq .net-core entity-framework-core

具有以下数据库架构:

  • 对象1
    • id
    • 名称
  • objects2
    • id
    • object1_id

这将翻译为以下内容:

public class Objects1
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public string ICollection<Objects2> Object2List {get; set;}
};

public class Objects2
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public Objects1 Object1 {get; set;}
};

如何根据objects2值过滤object1行?

类似的东西:

mydb.Objects1.Where(o1 => o1.Object2List.Any(o2.Name.Contains("bla")))

但是这给出了运行时异常。

1 个答案:

答案 0 :(得分:0)

因此,在一个非常简单的测试中,一切正常,但就我而言,我正在运行时动态生成OrderByThenBy调用,因此我需要调用OrderByThenBy,具体取决于IQueryable实际上是IOrderedQueryable

奇怪的是,如果在订购前调用了queryable.Where(o1 => o1.Object2List.Any(o2.Name.Contains("bla")))之类的内容,则var ordered = queryable as IOrderedQueryable<TModel>;不为null,但是对ThenBy的调用失败。我通过在过滤之前进行排序来解决了这个问题。