LINQ表达式中的聚合函数抛出错误.(不能翻译成商店表达.)

Sco*_*pio 5 c# linq entity-framework aggregate-functions linq-to-sql

错误:LINQ to Entities无法识别方法'System.String Aggregate [String,String](System.Collections.Generic.IEnumerable 1[System.String], System.String, System.Func3 [System.String,System.String,System.String])'方法,而且此方法不能被翻译成商店表达.

Linq表达:

      Items = context.TESTANSWER.Where(x => x.ID == 6729223232)
            .Join(context.QUESTIONREPOs, x => x.QUESTIONID, y => y.ID, (x, y) => new { x = x, y = y })
            .Join(context.OPTIONREPOs, p => p.x.QUESTIONID, q => q.QUESTIONID, (p, q) => new { p = p, q = q }).Where(p => p.p.x.RESPONSEID == p.q.ID)
            .GroupJoin(context.TESTANSWERASSOCIATION, c => c.p.x.ID, b => b.TESTANSWERID, (c, b) => new { c = c, b = b })
            .SelectMany(
                n => n.b.DefaultIfEmpty(),
                    (n, b) =>
                        new QuestListItemObj
                        {
                            State = n.c.p.x.STATE,
                            Association = n.b.Select(l => l.ASSOCIATION.TITLE).ToList().Aggregate((s, t) => s + ", " + t),
                            Description = n.c.p.y.DESCRIPTION,
                            Question = n.c.p.y.QUESTION,
                            Answer = n.c.q.OPTIONTEXT,
                        }).ToList();
Run Code Online (Sandbox Code Playgroud)

我也尝试了SelectMany但是得到了同样的错误..

 Affiliaiton = n.b.SelectMany(l => l.AFFILIATION.TITLE).Aggregate(string.Empty, (s, t) => s + ", " + t),
Run Code Online (Sandbox Code Playgroud)

小智 5

你有一个IQueryable转换为SQL.您的AggregateSQL是一个未知的方法,因此无法翻译它并获得异常.

一种可能的方法是AsEnumerable()之前打电话.这将导致查询执行并从SQL服务器获取数据,其余操作将在内存中执行(而不是在SQL Server上).

myQuery.AsEnumerable().Aggregate(...)
Run Code Online (Sandbox Code Playgroud)