System.Linq.Dynamic не работает для Entity Framework - PullRequest
3 голосов
/ 27 января 2011

Я пытаюсь использовать размещенную здесь библиотеку динамических запросов LINQ - http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

Он должен работать и для EF, но я не могу заставить его выполнить это требование.

Отлично работает следующее:

List<string> paramsList = new List<string> {"CustomerID"};
        var customer =
            ctx.Customers.Where(cus=>cus.CompanyName.Contains("A")).Select("new(" +
                                 string.Join(", ", paramsList.ToArray()) +
                                 ")");     

Однако, если я опущу предложение "Где" и сделаю что-то подобное

List<string> paramsList = new List<string> {"CustomerID"};
        var customer =
            ctx.Customers.Select("new(" +
                                 string.Join(", ", paramsList.ToArray()) +
                                 ")");     

Я получаю следующую ошибку:

'new' не может быть преобразован в допустимый конструктор типа или функцию., Вблизи функции, метода или конструктора типа

Это прекрасно работает, если я использую Linq2Sql вместо Linq2Entities.

Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2014

На случай, если кто-то еще столкнется с этим, как я:

ctx.Customers - это ObjectSet, который не работает с Dynamic Linq.

Однако, как только вы что-то добавитенапример .Contains (), вы получаете IQueryable, который действительно работает.

Вы также можете преобразовать explicity в IQueryable, например:

ctx.Customers.AsQueryable().Select(...)
0 голосов
/ 29 января 2011
...