2

私はLINQで最初のステップを実行しています。LINQ to SQL を使用して、比較的単純なクエリを作成しようとしています。これは、肺と乳腺に腺癌があるマウスを指定すると、マウスの腫瘍を返し、次のようにフォーマットされたグリッドビューで表示する準備ができています

| | 腺癌 | 肺、乳腺、 |

この回答の例と同様に、クエリを書きました

var tumors = from tumor in dc.Tumors
             where tumor.FK_Mouse == mouse.ID
             select new
             {
                 Name=tumor.Name, 
                 Organs=string.Join(", ", tumor.Organs.Select(t => t.Name))
             };

私が得るのはエラーです。元のテキスト (私の IIS はドイツ語にローカライズされています) は次のとおりです。

Der Elementzugriff "System.String Name" von "ToyApp.Organ" ist für den Typ "System.Collections.Generic.IEnumerable`1[ToyApp.Organ]" nicht zulässig.

元のエラーへの翻訳が見つかりませんでした。それを翻訳する私の最善の試みは次のとおりです。

「ToyApp.Organ」の要素アクセス「System.String Name」は、タイプ「System.Collections.Generic.IEnumerable`1[ToyApp.Organ]」に対して許可されていません

臓器名を結合しようとする代わりに Organs=tumor.Organs を選択すると、すべてが正常に機能し、各腫瘍の臓器のコレクションを取得しているため、ORM ではなく連結に問題があるはずです。

ドイツ語のエラー メッセージをグーグル検索しても結果はまったく見つかりません。また、私の逆翻訳も見つかりません (元の文言からかけ離れすぎている可能性があります)。

これを引き起こしているアイデアはありますか?

4

1 に答える 1

2

連結は、LINQ to SQL 部分ではサポートされていないと思われます。そのため、SQL 部分で必要なすべてのデータをフェッチしてから、連結のためにインプロセス LINQ to Objects に切り替えます。

var tumors = dc.Tumors
               .Where(tumor => tumor.FK_Mouse == mouse.ID)
               .Select(tumor => new { 
                   tumor.Name, 
                   Organs = tumor.Organs.Select(o => o.Name)
               })
               .AsEnumerable() // Switch to LINQ to Objects
               .Select(tumor => new {
                   tumor.Name,
                   Organs = string.Join(", ", tumor.Organs)
               });
于 2013-04-29T10:54:34.497 に答える