Как сделать OFTYPE ТОЛЬКО в EF Code First с Linq? - PullRequest
1 голос
/ 18 декабря 2011

При использовании традиционной Entity Framework и запросов с ESQL вы можете использовать OFTYPE только для возврата только базовых типов.

См .: http://msdn.microsoft.com/en-us/library/bb399295.aspx

Во-первых, в Entity Framework Code, у меня настроено наследование, где B является подтипом A. Выполнение MyContext.Set<A>().OfType<A>() по-прежнему возвращает элементы типа B. В идеале, я хотел бы вызвать MyContext.Set<A>().OfOnlyType<A>(), и оно будет переведено таким же образом. как при использовании только OFTYPE ESQL.

Я также обнаружил, что могу использовать оператор is в операторе where, но, опять же, он будет возвращать сущности A и B.

Как написать выражение linq, которое будет фильтровать только элементы типа A?

1 Ответ

5 голосов
/ 18 декабря 2011

Нет способа получить только A экземпляры напрямую (эквивалентно ONLY) в Linq-to-entity, если вы каким-то образом не исключите производные экземпляры из набора результатов. Например:

var list = MyContext.Set<A>().Where(a => !(a is B)).ToList();
...