Benzersiz üst satırlar döndüren LINQToSQL'den bir sol dış birleştirmeyi çeviriyorum.Sol Dış Bağlan ve Var olan Linq için SQL C# .NET 3.5
2 tablom var (Project, Project_Notes ve Project_ID ile bağlantılı bir çok ilişki var). 2 tablosunda birden çok sütun üzerinde bir anahtar kelime araması yapıyorum ve yalnızca Project_Notes'ta bir anahtar kelime bir anahtar kelime içeriyorsa benzersiz projeleri döndürmek istiyorum. Bu linqtoSQl dizisine gidiyorum ama birden çok Project satırını döndürüyor gibi görünüyor. Belki bir LINK'de Exist
mu? Ya da belki bir çeşit bir grup? İşte
query = from p in query
join n in notes on p.PROJECT_ID equals n.PROJECT_ID into projectnotes
from n in notes.DefaultIfEmpty()
where n.NOTES.Contains(cwForm.search1Form)
select p;
burada profilcisine üretilen SQL var
exec Sp_executesql N'SELECT [t2] [Başlık], [t2] [Devlet], [.. t2]. [PROJECT_ID], [t2]. [PROVIDER_ID], [t2]. [CATEGORY_ID], [t2]. [Şehir], [t2]. [UploadedDate], [t2]. [Gönderilen Tarih], [ t2]. [Project_Type] FROM (SELECT ROW_NUMBER() ÜZERİNDEN ( [t0]. [UploadedDate] OR). [ROW_NUMBER], [t0]. [Başlık], [t0]. [Durum], [t0]. [PROJECT_ID], [t0]. [PROVIDER_ID], [t0]. [CATEGORY_ID], [t0]. [Şehir], [t0]. [YüklendiDurum], [t0]. [Gönderilen Tarih], [t0]. [Project_Type] FROM [PROJELER] [TEKLİF DIŞI BIRAKMA ORTAMI] [dbo]. [PROJECT_NOTES] AS [t1] AÇIK 1 = 1 NEREDE ([t1]. [NOTLAR] GİBİ @ p0) VE ([t0]. Gönderilen Tarih]> = @ p1) VE ([t0]. [Gönderilen Tarih] < @ p2) VE ([t0]. [PROVIDER_ID] = @ p3) VE ([t0]. [CATEGORY_ID] NULL IS) AS [t2 ] [R2_NUMBER] [ROW_NUMBER] BETWEEN @ p4 + 1 VE @ p4 + @ p5 SIRA GÖRE [t2]. [ROW_NUMBER] ', N' @ p0 varchar (9), @ p1 datetime, @ p2 datetime, @ p3 int, @ p4 int, @ p5 int ', @ p0 ='% chicago% ', @ p1 =' '2000-09-02 00: 00: 00: 000' ', @ p2 =' '2009-03 -02 00: 00: 00: 000 '', @ p3 = 1000, @ p4 = 373620, @ p5 = 20
Bu sorgu, sonuçlarda 1-çok ilişkinin tüm katkısını döndürür. Buradan LINQ'da bir Exists
'un nasıl yapıldığını buldum. İşte
http://www.linq-to-sql.com/linq-to-sql/t-sql-to-linq-upgrade/linq-exists/ LinqToSQL Exists
kullanıyor:
query = from p in query
where (from n in notes
where n.NOTES.Contains(cwForm.search1Form)
select n.PROJECT_ID).Contains(p.PROJECT_ID)
select p;
oluşturulan SQL deyimi:.
exec Sp_executesql N'SELECT COUNT (*) [dbo] DAN [değer] OLARAK [PROJELER ] AS [t0] NEREDE (EXISTS (SELECT NULL AS [BOŞ]] FROM [dbo]. [PROJECT_NOTES] AS [t1] NEREDE ([t1] .PROJECT_ID] = ([t0]. [PROJECT_ID])) VE ([t1]. [NOTLAR] LIKE @ p0))) VE ([t0]. [Gönderilen Tarih]> = @ p1) VE ([t0]. [Su bippedDate] < @ p2) VE ([t0]. [PROVIDER_ID] = @ p3) VE ([t0]. [CATEGORY_ID] NULL) ', N' @ p0 varchar (9), @ p1 datetime, @ p2 datetime , @ p3 int ', @ p0 ='% chicago% ', @ p1 =' '2000-09-02 00: 00: 00: 000' ', @ p2 =' '2009-03-02 00:00 : 00: 000 '', @ p3 = 1000
ben Exists
kullanarak databind()
bir SQL zaman aşımı olsun.
açıkça Skip geldi oluşturulan SQL göstermek alın ve Kont biraz crummy - sonra Skip bize göstermiyor , Take ve Count. –
hepsi Gridview denetimi tarafından oluşturulur. Verileri ona bağladığımdan, özel sayfalama yapmak zorunda kalmadım. – stevenjmyu