LINQToSQLからの左外部結合を変換して、一意の親行を返すことができません。左外側結合し、Linq To SQL C#.NET 3.5に存在
私は2つのテーブルを持っています(Project、Project_Notes、そしてProject_IDによってリンクされた1-manyの関係です)。 2つのテーブルの複数の列でキーワード検索を実行していますが、Project_Notesの列にキーワードが含まれている場合にのみ、固有のプロジェクトを返したいとします。私はこのlinqtoSQlシーケンスを行っているが、それは複数のプロジェクトの行を返すようだ。何とかLINQでExist
を実行していますか?または、何らかのグループの人ですか?ここで
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;
ここでは、プロファイラから生成SQLだ
幹部sp_executesqlをN'SELECT [T2] [タイトル]、[T2] [状態]、[。。 t2] [都市名]、[t2]。[アップロードされた日付]、 [t2]。[提出日]、[ t2]。[タイトル]、[t0]。[状態]、[t0]。[Project_Type] FROM(ROW_NUMBER、[t0]。 [PROJECT_ID]、 [T0]。[PROVIDER_ID]、[T 0] [CATEGORY_ID]、[T 0] [シティ]、[T 0] [UploadedDate]、 [T0]。[SubmittedDate]、[T 0] [Project_Type] FROM [DBO]。[PROJECTS] AS [T0] LEFT OUTERは [DBO]をJOIN [PROJECT_NOTES] = 1 WHERE([T1]。@ P0 LIKE [NOTES])AND ([T 0] ON [T1] AS。 SubmittedDate]> = @ P1)と([T 0] [SubmittedDate】P2 @ <)AND([T 0] [PROVIDER_ID] = @ P3)AND([T 0]は[CATEGORY_ID] NULL))AS [T2と]ここで、[T2]。[ROW_NUMBER] BETWEEN @ P4 + 1 AND @ P4 + @ P5 BY ORDER [T2]。[ROW_NUMBER] 'N' @ P0はVARCHAR(9)、@ P1日時、@ P2日時、@ @ p2 = '' 2009-03 p3 int、@ p4 int、@ p5 int '、@ p0 ='%シカゴ% '、@ p1 =' '2000-09-02 00:00:00:000' '、@ p2 =' '' -02 00:00:00:000 ''、@ P3 = 1000、@ P4 = 373620、@ P5 = 20
このクエリは、結果に1対多の関係のすべてのmutiplesを返します。ここからLINQでExists
を実行する方法が見つかりました。
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;
生成されたSQL文:ここhttp://www.linq-to-sql.com/linq-to-sql/t-sql-to-linq-upgrade/linq-exists/
はExists
を使用してLINQToSQLある。
のexec sp_executesqlをN'SELECTのCOUNT(*)[値]と[DBO]の[プロジェクト([t1] .PROJECT_ID] =([t0]。[PROJECT_ID]))AND([PROJECT_ID])と[(PROJECT_ID) [t1]。[NOTES] LIKE @ p0))AND ([t0]。[SubmittedDate]> = @ p1)AND([t0]。[Su bmittedDate] < @ P2)AND([T 0] [PROVIDER_ID] = @ P3)AND([T 0]が[CATEGORY_ID]がNULL) 'N' @ P0はVARCHAR(9)、@ P1日時、@ P2日時@ p2 = ''、@ p2 = ''、@ p2 = ''、@ p2 = ''、@ p3 =00:00 :00:000 ''、@ P3 = 1000
私はdatabind()
からExists
を使用してから、SQLタイムアウトを取得します。
明らかにスキップから来た生成されたSQLを表示乗り、そしてカウントし、やや安っぽくある - そしてその後、スキップ、私たちが表示されません、テイク、カウント。 –
すべてがGridviewコントロールによって生成されます。データをバインドするので、カスタムページングを行う必要はありませんでした。 – stevenjmyu