【问题标题】:Getting Custom Column from IQueryable DB First Approach EF从 IQueryable DB First Approach EF 获取自定义列
【发布时间】:2016-11-21 19:49:33
【问题描述】:

我正在使用实体框架中的数据库优先方法,我必须从实体中检索特定列。

Public IQueryable<Entity.Employees> GetEmployeeName(String FName,String LName)
{
     var query = (from s in Employees
                  where s.firstName = FName && s.lastName = LName
                  select new {s.firstName, s.middleName});
     return query;
}

这里的 return 语句抛出一个错误,它似乎与 Employees(实体)列不匹配。你能帮我解决这个问题吗?提前致谢。

【问题讨论】:

    标签: wcf linq-to-entities odata wcf-data-services wcf-data-services-client


    【解决方案1】:

    您需要使用 == 进行比较,还需要使用动态类型作为返回类型,因为您返回的是自定义匿名类型。试试这个

    Public IQueryable<dynamic> GetEmployeeName(String FName,String LName)
    {
    var query=(from s in Employees
    where s.firstName==FName && s.lastName==LName
    select new {s.firstName,s.middleName});
    return query.AsQueryable();
    }
    

    最后你会像下面这样使用它,记住智能感知不适用于动态对象。

    var query = GetEmployeeName("Jake", "Smith");
                List<dynamic> results = query.ToList();
                foreach (dynamic result in results)
                {
                    string fristName = result.FirstName;
                    string lastName = result.MiddleName;
                }
    

    【讨论】:

    • 我已修改为 == 但我面临的问题是在 Entity.Employees 中我们有 4 列,但 var 查询我只希望 select 语句中的 2 列。所以我收到如下错误:'匿名类型:a 是新的 {} 无法隐式转换类型 'System.Linq.IQueryable'>' to'System.Linq.IQueryable'.存在显式转换(您是否缺少演员表?)'
    • 我刚刚更新了我的帖子。由于您要返回匿名类型,因此您需要使用动态类型作为返回类型。或者,您可以创建一个包含两个字段 FirstName 和 MiddleName 的自定义包装器类型,然后将其返回。这将允许您在从结果中获取数据时让智能感知正常工作。
    • 我正在尝试访问此方法方法link,但出现错误。我想获取特定的列而不是整个实体列。您能否建议或提供一个示例 sn-p 如何实现这一点。提前致谢。
    猜你喜欢
    • 1970-01-01
    • 2019-08-31
    • 2018-06-05
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多