2

LINQ のテーブルで自己結合を行う必要がある状況があります。このテーブルは、ItemsID、Title、SeriesTitle などの多くのフィールドで構成されています。アイテムはシリーズまたはメンバーのいずれかであり、"S" または "M" の文字が含まれる ItemId を調べればわかります。ItemId "S117" を持つシリーズのメンバーであるすべてのレコードを取得する必要があります。以下のコードを使用して、単純な SQL でこれを行うことができます。

select  i.Series_Title, i.Item_ID, i2.Item_ID as Member_ID, 
        i2.Title as Member_Title, i2.Series_Title as Member_Series_Title 
        from Items i join Items i2 on i.Series_Title = i2.Series_Title
        where i.Item_ID = "S117"

さて、このクエリを LINQ で翻訳すると、次のようになります。

items = _dataContext.Items.AsQueryable();
items = from series in items 
        join members in items on series.Series_Title.ToLower() 
        equals members.Series_Title.ToLower()
        where series.Item_ID.ToLower().Equals(itemId)
        select series;

このクエリの最後の行は、select seriesシリーズのみを取得しますが、メンバーは取得しません。メンバーも必要です。ほとんどすべてのフィールドを表示する必要があるMVC3 Razorビューを使用しているため、使用していません を使用 select new {....} しようとしてもselect new {series, members}、この例外が発生しました-

タイプ 'System.Linq.IQueryable' を 'System.LinQ.IQueryable<My.App.models.Items>' に暗黙的に変換することはできません 明示的な変換が存在します。

どんな提案でも大歓迎です。

4

1 に答える 1

1

これを試して:

var items1 = _dataContext.Items.AsQueryable();
var items2 = from series in items1 
        join members in items1 on series.Series_Title
        equals members.Series_Title
        where series.Item_ID== 'S117'
        select series;
于 2011-06-19T13:40:14.670 に答える