5

エラー: 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])' メソッドを認識せず、このメソッドは認識できませんストア表現に変換されます。

リンク式:

      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();

私もSelectManyを試しましたが、同じエラーが発生しました..

 Affiliaiton = n.b.SelectMany(l => l.AFFILIATION.TITLE).Aggregate(string.Empty, (s, t) => s + ", " + t),
4

2 に答える 2

5

IQueryableSQL に変換される があります。YourAggregateは SQL に認識されていないメソッドであるため、変換する方法がなく、例外が発生します。

可能な方法は、前に呼び出すことAsEnumerable()です。これにより、クエリが実行され、SQL サーバーからデータが取得されます。残りのアクションはメモリ内で (SQL サーバーではなく) 実行されます。

myQuery.AsEnumerable().Aggregate(...)
于 2013-10-18T15:53:47.010 に答える
3

エラー メッセージが示すように、データベースはそのコードを SQL に変換する方法を認識していません。

幸いなことに、そうする必要はまったくありません。DB 側でデータをカンマ区切りの文字列にするのではなく、断片を取り出して C# で文字列を作成します。同じ量のデータを取得しているため、データベースを使用する本当の理由はありません。

AsEnumerable次の操作がDB側ではなくオブジェクトへのlinqであることを確認するために使用できますが、この場合Aggreagte、文字列に値を追加するために使用するツールは貧弱です。を使用するだけString.Joinです。

var query = n.b.SelectMany(l => l.AFFILIATION.TITLE);


//not very efficient option, but will work
string data1 = query.AsEnumerable().
    .Aggregate(string.Empty, (s, t) => s + ", " + t);

//faster, more efficient, simpler to write, and clearer to the reader.
string data2 = string.Join(", ", query);
于 2013-10-18T15:54:32.353 に答える