Gerçekten böyle bir şey yapmak istiyorum:LINQ'da Varlıklar için SQL "Var Olan Varlıklar" nasıl yapılır?
Select *
from A join B on A.key = B.key join C on B.key = C.key -- propagated keys
where exists (select null from B where A.key = B.key and B.Name = "Joe") and
exists (select null from C where B.key = C.key and C.Name = "Kim")
linq deyimi Varlık Çerçeve 4 ve C# kullanarak nasıl olur?
Güncelleme:
Görünüşe .Contains() üretecek sonuçlar "Nerede Var". Yani, başka bir girişim
(bu hatta LOL derlemek eğer ben bilmiyorum):
var inner1 = from recordB in B
where recordB.Name = "Joe"
select recordB.key;
var inner2 = from recordC in C
where recordC.Name = "Kim"
select recordC.key;
var result = from recordA in A
where inner1.Contains(recordA.key) &&
inner2.Contains(recordA.key)
select recordA;
DÜZENLEME:
:var result = from A in Products
where A.kfield1 == 1 && A.kfield2 == 2 &&
(from B in Btable
where B.otherid == "Joe" && // field I want to select by
B.kfield1 == A.kfield1 &&
B.kfield2 == A.kfield2 // Can keep adding keys here
select A.identifier // unique identity field
).Contains(A.identifier) &&
(from C in Ctable
where C.otherid == "Kim" && // field I want to select by
C.kfield1 == A.kfield1 &&
C.kfield2 == A.kfield2 // Can keep adding keys here
select A.identifier // unique identity field
).Contains(A.identifier)
select A;
Bu, bu SQL üretti: WOW bu aslında çalışmış nedir
SELECT [t0].[identifier], [t0].*
FROM [A] AS [t0]
WHERE ([t0].[kfield1] = @p0) AND ([t0].[kfield2] = @p1) AND (EXISTS(
SELECT NULL AS [EMPTY]
FROM [B] AS [t1]
WHERE ([t0].[identifier] = [t0].[identifier]) AND ([t1].[otherid] = @p2) AND
([t1].[kfield1] = [t0].[kfield1]) AND
([t1].[kfield2] = [t0].[kfield2]))) AND (EXISTS(
SELECT NULL AS [EMPTY]
FROM [C] AS [t2]
WHERE ([t0].[identifier] = [t0].[identifier]) AND ([t2].[otherid] = @p3) AND
([t2].[kfield1] = [t0].[kfield1]) AND
([t2].[kfiekd2] = [t0].[kfield2])))
İstediğim şey budur. [T0] dikkat edin. [Identifier] = [t0]. [Tanıtıcı] null (SQL) kendisi dahil herhangi bir şey eşit karşılaştırmak değil çünkü boş değerler filtreleyen
eşittir. Şimdiye kadar internette bulduğum tek şey, SO cevaplarının dışında .Contains() oldu. Gördüm. Her neyse() kullanılmış ama iki ve ikiyi bir araya getirmedim. –
Bu soru, bunu yapmak için bana kod gösteren sona erdi: http://stackoverflow.com/questions/4084102/how-would-i-improve-this-7-line-linq-query-that-acts-as-a- Şartname –