でLINQにSQLを変換しようと、私は、LINQには、このSQLを変換しようとしています:サブクエリ
SELECT [t0].[ThreadId] FROM [MessageParticipants] AS [t0]
WHERE EXISTS(
SELECT threadId
FROM [MessageParticipants] AS [t1]
WHERE ([t1].[UserId] = 23)
)
AND ([t0].[UserId] = 3)
私はLINQPadに変換しようとしているが、私はそれが
にこれはほとんどの仕事を仕事を得るカント:
var result = from mp2 in MessageParticipants
let x = (from mp in MessageParticipants where mp.UserId == 3 select mp.UserId)
where x.Contains(23)
select mp2;
result.Dump();
(間違って)上記LINQの結果クエリ
DECLARE @p0 Int = 23
DECLARE @p1 Int = 3
SELECT [t0].[Id], [t0].[ThreadId], [t0].[UserId], [t0].[CreatedDate], [t0].[MessageId]
FROM [MessageParticipants] AS [t0]
WHERE EXISTS(
SELECT NULL AS [EMPTY]
FROM [MessageParticipants] AS [t1]
WHERE ([t1].[UserId] = @p0) AND ([t1].[UserId] = @p1)
) --> AND should be here not in the inner query
おそらくもっと良い方法がありますか?
私は、スレッドIDを見つけることによって、ユーザ23とユーザ3がすでに進行中の会話をしているかどうかを調べようとしています。
のでMessageParticipantsテーブルは次のようになります。
Id, ThreadId, UserId
--------------------
1 52 23
2 52 3
3 11 20
あなたの条件が実際に(すべてのt0でテーブルからすべての情報を使用していない)ものをフィルタリングしないEXISTS奇妙な。 – Evk
最初のクエリは意味がありません。なぜなら、それを含んでいるクエリに再び参加することはないからです。そうでないと、そのテーブルにはユーザーが23のエントリが含まれているだけです。たぶんあなたは、あなたが戻ったりフィルタをかけようとしていることを何と言っても英語で書くことができますか? – Igor
@Igorはさらに詳しい情報を追加しました – n3tx