0

私の発言は

Contents.
    Select(x=> new 
        {
            ContentUsers = x.ContentUsers.
                Where(t=>t.UserId==2).
                Select(t=>t.ContentId)
        }).
    Where(y=>y.ContentUsers.Any())

別のステートメントで使用したいIDがいくつかあります。

ここに画像の説明を入力

Contents.Where(x=>x.Id == 633,634,635)

どうすればそれらをマージできますか?

4

1 に答える 1

1

あなたが欠けているのはContains機能です。これを単一のクエリ式で表現する方がおそらく簡単です。コードを単一のクエリ式に変換すると、次のようになります。

var content =
    from c in Contents
    let contentUsers = 
        from x in Contents
        select new
        {
            ContentUsers = 
                from t in x.ContentUsers
                where t.UserId == 2
                select t.ContentId
        }
    where contentUsers.Any(cu => cu.ContentUsers.Contains(c.Id))
    select c;

ただし、必要なのは、コレクション内のContent特定の に関連付けられたレコードだけを取得することだけのようです。これははるかに簡単です。UserIDContentUsers

var content =
    from c in Contents
    where c.ContentUsers.Any(t => t.UserId == 2)
    select c;

または、必要に応じて

var content = Contents.Where(c => c.ContentUsers.Any(t => t.UserId == 2));
于 2013-03-19T18:49:26.683 に答える