我想繼續從我的Projects表中獲取所有或至少一些列,這些列與我的TimeTrackings表有一對多的關係。使用EF SelectMany拼合列表
當我創建查詢時,只有所有的子(TimeTracking實體)字段出來,並且只是父項(項目表)的ID。
如何使用SelectMany實現有效連接以扁平列表獲取所有列或至少從兩個實體中指定特定列。
下面,是我使用的EF查詢:
Customers.SelectMany(p => p.Projects).Where (p => p.Quote != null).SelectMany (t => t.TimeTrackings).Where (t => t.Notes != null)
下面是通過LINQPad生成的SQL查詢。 注意只有ProjectID而不是該實體的其他關聯列出來。
SELECT
[Extent2].[TimeTrackingID] AS [TimeTrackingID],
[Extent2].[ProjectID] AS [ProjectID],
[Extent2].[StartDate] AS [StartDate],
[Extent2].[EndDate] AS [EndDate],
[Extent2].[Notes] AS [Notes],
[Extent2].[CreatedDate] AS [CreatedDate],
[Extent2].[UpdatedDate] AS [UpdatedDate]
FROM [dbo].[Projects] AS [Extent1]
INNER JOIN [dbo].[TimeTrackings] AS [Extent2] ON [Extent1].[ProjectID] = [Extent2].[ProjectID]
WHERE ([Extent1].[Quote] IS NOT NULL) AND ([Extent2].[Notes] IS NOT NULL)
下面是查詢的輸出:
這看起來像使用QUERY語法的更合乎邏輯的分辨率,其中INNER JOINS被生成以獲得期望的列。 – sagesky36 2015-04-01 14:42:11