2012-01-26 61 views
3

我试图使用LINQ/LAMBDA访问属性无法解析属性(LINQ /λ)

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

但有看起来像这样的书类中定义的另一个属性:

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,)] 

回答

3

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(); 
+1

非常感谢乔恩的解决方案和明确的解释... thnx –

相关问题