【问题标题】:using methods within Linq projection在 Linq 投影中使用方法
【发布时间】:2010-09-21 23:35:02
【问题描述】:

给定以下代码:

        var EmployeeXPosition = from emp in context.WTDEmployee
                                from ep in emp.WTDEmployeeXOXPosition
                                select new { 
                                    EmployeeId = emp.id, 
                                    FullNameAndPosition =  string.Format("{0} {1} : {2}", emp.FirstName, emp.LastName, ep.WTDPosition.Position) 
                                };

它给出了错误:

LINQ to Entities 无法识别 方法'System.String 格式(System.String,System.Object, System.Object, System.Object)' 方法, 而且这个方法不能翻译 到商店表达式中。

果然我能做到:

 emp.FirstName+" "+ emp.LastName +" : " + ep.WTDPosition.Position

但它看起来很丑,有什么建议可以改用string.Format 吗?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    我通常通过创建两个语句来解决这个问题 - 一个在 LinqToEntities(或 ToSql 或其他)中,另一个在 LinqToObjects 中。我在商店里做我需要做的事情,然后对内存中的对象做一个单独的处理步骤。这混合了两全其美。

     var EmployeeXPosition = from emp in context.WTDEmployee
                                    from ep in emp.WTDEmployeeXOXPosition
                                    select new { 
                                        emp.id, 
                                        emp.FirstName, 
                                        emp.LastName,
                                        ep.WTDPosition.Position
                                    };
    
    var result = from item in EmployeeXPosition.ToList()
                 select new 
                 {
                    EmployeeId = item.id, 
                    FullNameAndPosition =  string.Format("{0} {1} : {2}", item.FirstName, item.LastName, item.Position) 
                 };
    

    【讨论】:

      【解决方案2】:

      This codeplex project 声称完全按照您的意愿行事。 不幸的是,我现在没有时间尝试 - 但这是他们所说的

      LINQ 表达式投影库提供了可以使用的工具 LINQ 投影中的 lambda 表达式(匿名和预定义 types) 即使查询中没有定义 lambda 表达式,但是 而是存储在变量中或通过函数检索或 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多