Фильтр по ICollection в ядре EF - PullRequest
0 голосов
/ 27 июня 2018

Имея следующую схему базы данных:

  • objects1
    • 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;}
};

Как отфильтровать строки object1 по значениям objects2?

Что-то вроде:

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

Но это дает исключение во время выполнения.

1 Ответ

0 голосов
/ 28 июня 2018

Итак, в очень простом тесте все работает, но в моем случае я динамически генерирую вызовы OrderBy и ThenBy во время выполнения, поэтому мне нужно вызывать OrderBy или ThenBy в зависимости от если IQueryable на самом деле IOrderedQueryable.

Странно, если перед заказом что-то наподобие queryable.Where(o1 => o1.Object2List.Any(o2.Name.Contains("bla"))), var ordered = queryable as IOrderedQueryable<TModel>; не равно нулю, но вызов ThenBy завершается неудачно. Я исправил проблему, заказав перед фильтрацией.

...