使用Linq投影中的方法

时间:2010-09-21 23:35:03

标签: c# linq

给出以下代码:

        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的任何建议吗?

2 个答案:

答案 0 :(得分:5)

我通常通过创建两个语句来解决这个问题 - 一个在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) 
             };

答案 1 :(得分:1)

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

  

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