не удалось разрешить свойство (linq / lambda) - PullRequest
3 голосов
/ 26 января 2012

Я пытаюсь использовать LINQ / LAMBDA для доступа к свойству

List<Latest> latestBooks = DataContext.Session.Query<Book>().Where(x=> x.Enabled == "True" ).Select(x => new Latest(x.Title,x.Author)).Take(10).ToList();

Но в классе Book определено другое свойство, которое выглядит следующим образом:

public virtual string FrontEndLink { get { return string.Format("http://myurl/{0}", Filename); } }

Когда я пытаюсьэто

List<Latest> latestBooks = DataContext.Session.Query<Book>().Where(x=> x.Enabled == "True" ).Select(x => new Latest(x.FrontEndLink)).Take(10).ToList();

Код ломается и выдает ошибку:

Could not resolve property: Quote((x, ) => (x.Id)), ), Quote((x, ) => (new Latest(x.FrontEndLink, ))), ), p1, )]

1 Ответ

3 голосов
/ 26 января 2012

LINQ to Entities пытается преобразовать все до ToList в SQL - и не сможет сделать это с вашим свойством FrontEndLink.Вы хотите сделать этот бит в LINQ to Objects, но после фильтрации только до 10 результатов.Поэтому я бы использовал:

var latestBooks = DataContext.Session.Query<Book>()
                             // Do the first bit in the database
                             .Where(x=> x.Enabled == "True")
                             .Take(10)
                             // Do the rest in LINQ to Objects
                             .AsEnumerable()
                             .Select(x => new Latest(x.FrontEndLink))
                             .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...