复杂的Linq查询错误“..Entities无法识别方法..”

时间:2013-07-02 17:52:49

标签: wcf linq entity

我开始使用.NET 4.5实体框架编写wcf Web服务。

我很难弄清楚如何输出以下linq查询 这是我的代码:

using (var context = new myEntities())
{

var countResultsByArea = from v in context.vPerson
                        join pe in context.pEvent on v.pevent_id equals pe.pevent_id
                        join pd in context.pEventArea on pe.pevent_id equals pd.pevent_id
                        join d in context.dArea on pd.darea_id equals d.darea_id
                        join z in
                            (
                                from el in context.event
                                select new { el.event_id, el.title_1, el.title_2, el.event_date }
                            ) on pe.event_id equals z.event_id
                        where (v.status.ToString() == "A" || v.status.ToString() == "P") && pe.event_id == 800
                                        && new[] { 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449 }.Contains(pd.area_id)
                        group new { d, z, v } by new { d.name_1, z.title_1 } into y
                        let myGroup = y.FirstOrDefault()
                        let myDArea = myGroup.d
                        let myPEvent = myGroup.z
                        select new { distArea = myDArea.name_1, title = y.Max(x => x.z.title_1), personCount = y.Count() };

if (countResultsByArea != null)
    foreach (var item in countResultsByArea)
    {
        Console.WriteLine(item.distArea);
        Console.WriteLine(item.title);
        Console.WriteLine(item.personCount);
    }
else
    throw new Exception(string.Format("Error retrieving voter count by CD", "Error"));

}

在foreach循环返回错误:

之前,我没有收到错误
  

LINQ to Entities无法识别方法'System.String   ToString()'方法,并且此方法无法转换为商店   表达

我在这里看到了其他问题,答案使用.AsEnumerable将查询输出为List,但我不知道如何修改linq查询,因为它太复杂了。
任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于错误明确指出,EF的查询翻译器不知道如何处理ToString()

如果是char,您可以直接使用单引号将其与字符文字进行比较。

答案 1 :(得分:0)

不要在v.status字段上使用.ToString()。

where (v.status == "A" || v.status == "P") && pe.event_id == 800