【问题标题】:could not resolve property (linq/lambda)无法解析属性(linq/lambda)
【发布时间】:2012-02-19 11:59:46
【问题描述】:

我正在尝试使用 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, )]

【问题讨论】:

    标签: .net lambda linq-to-entities


    【解决方案1】:

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

    【讨论】:

    • 非常感谢 Jon 的解决方案和清晰的解释...... thnx
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多