0

オブジェクトのシーケンスが 2 つあります。つまりMessagesMessageオブジェクトNewsflashes用とNewsflashオブジェクト用です。

どちらも Entity Framework ADO.NET Entity Model から派生します。モデルの図は次のとおりです。 ここに画像の説明を入力

ご覧のとおり、 はNewsflashから継承していMessageます。ただし、コントローラーで生成されたインデックスは何らかのエラーが発生したため、正しいシーケンスをビューに渡すために手動でクエリを実行する必要があります。

テーブルには 1 つの列しかありません。Newsflashこれは Id であり、同時にMessageId への外部キーです。LINQでこのようにクエリしたいSELECT * FROM MESSAGE WHERE ID IN (SELECT ID FROM NEWSFLASH)

これまでのところ、次のようなことを試しました。 var message = Messages.Where(x => x.Id == Newsflash.Any(y=>y.Id))

しかし、intをboolに変換できないというエラーが発生しています。私は何を間違えましたか?特にリストからのネストされた選択はLINQでどのように処理されますか? シーケンス内の要素にアクセスするにはどうすればよいですか。この場合Newsflash、IDを個別に取得できるようにしますか?

4

2 に答える 2

2

newsflash が単なる ID のリストである場合は、これを試してください。

var message = Messages.Where(x => Newsflash.Contains(x.Id));

また

var message = Messages.Where(x => Newsflash.Select(y => y).Contains(x.Id));

簡単な例。

var listOfInts = new List<int>{1,2,3,4,5,6,7,8,9,10};
var listOfInts2 = new List<int>{1,2,3,4,5};

listOfInts.Where(x => listOfInts2.Contains(x));
于 2013-06-11T01:49:20.353 に答える
2

Any は、値のリストではなくブール値を返します。Newsflash ID のリストが必要な場合は、Newsflash.Select(x => x.Id)

ニュース速報のあるメッセージのリストを取得するには、次を使用する必要があります。

var messages = (from m in Messages
                join n in Newsflash on m.Id equals n.Id
                select m).ToList();

これにより、それぞれの Id に基づいてメッセージがニュースフラッシュに結合され、一致する Message オブジェクトが選択されます。

代替ランバ構文:

var messages = Messages.Join(Newsflash, x => x.Id, y => y.Id, (x, y) => new { Message = x }).ToList();
于 2013-06-11T01:35:35.403 に答える