2013-10-18 21 views
5

エラー: LINQ to Entitiesメソッド 'System.String Aggregate [String、String](System.Collections.Generic.IEnumerable 1[System.String], System.String, System.Func 3 [System.String、System。 String、System.String]) 'メソッドであり、このメソッドをストア式に変換することはできません。LINQ式の集計関数がエラーをスローします。 (ストア式に変換できません)

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

また、私はちょうどあなたがSQLに変換IQueryableを抱えている。..

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

答えて

5

をSelectManyを試してみましたが、同じエラーを得ました。 AggregateはSQLでは未知のメソッドなので、変換する方法はなく、例外はあります。

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

myQuery.AsEnumerable().Aggregate(...) 
3

エラーメッセージがあなたを語っていると、データベースはSQLにそのコードを変換する方法を知りません。

幸運なことに、実際にそうする必要はありません。データをDBの最後にカンマ区切りの文字列にするのではなく、ピースをプルダウンしてC#で文字列を作ります。同じ量のデータを取得しているので、データベースを使用する本当の理由はありません。

AsEnumerableを使用すると、次の操作がDB終了ではなく、linq toオブジェクトで実行されるようにすることができますが、この場合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); 
関連する問題