【问题标题】:returning multiple fields back from a Linq lambda从 Linq lambda 返回多个字段
【发布时间】:2011-01-17 15:06:20
【问题描述】:

我有以下代码从columnName = Y' 的数据库返回结果。代码字很好,直到我想限制查询返回的字段。

我得到了错误

无法将类型“System.Linq.IQueryable[AnonymousType#1]”隐式转换为“System.Linq.IQueryable[MyApp.Models.Approved]”。存在显式转换(您是否缺少演员表?)

public IQueryable<Approved> ReturnRecordsByObjectiveFlag(string columnName)
    {
        var param = Expression.Parameter(typeof(Approved), "x");
        var predicate = Expression.Lambda<Func<Approved, bool>>(
            Expression.Equal(
                Expression.PropertyOrField(param, columnName),
                Expression.Constant('Y',typeof(char?))
            ), param);
        return db.Approved.Where(predicate).Select(x =>new{x.RefNo, x.RefGroup, x.Location });
    }

在这条线上我得到了错误

return db.Approved.Where(predicate).Select(x =>new{x.RefNo, x.RefGroup, x.Location });  

我在哪里做演员?

非常感谢 Marc Gravell 以同样的方法提供Answering an earlier question

【问题讨论】:

    标签: c# .net lambda


    【解决方案1】:

    这应该可以工作

    return db.Approved.Where(predicate).Select(x =>new Approved{x.RefNo, x.RefGroup, x.Location });  
    

    它给出了这个错误,因为 select 语句正在创建一个匿名类型

    【讨论】:

    • 我之前确实尝试过,但我收到错误:无法使用集合初始化程序初始化类型“MyApp.Models.Approved”,因为它没有实现“System.Collections.IEnumerable”
    • 你可以使用属性初始化器,所以:new Approved() { PROPERTYNAME = VALUE, PROP2 = VAL2 etc... } 使用 Approved 类的属性。
    【解决方案2】:

    试试下面的代码。

    return db.Approved.Where(predicate).Select(x =>new {x.RefNo, x.RefGroup, x.Location });  
    

    在创建匿名对象时。

    【讨论】:

      猜你喜欢
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      相关资源
      最近更新 更多