0

我开始使用 .NET 4.5 Entity Framework 编写 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 将查询输出为列表,但我不确定如何修改 linq 查询,因为它非常复杂。
任何帮助将不胜感激。

4

2 回答 2

0

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

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

于 2013-07-02T17:55:35.570 回答
0

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

where (v.status == "A" || v.status == "P") && pe.event_id == 800
于 2013-07-02T18:01:57.883 回答