2017-05-15 48 views
0

我曾嘗試使用distinct(),還有一些可查詢下面的代碼peice的:LINQ的鮮明SQL Statementet

var finalWhere = Expression.Lambda<Func<Data.DataModel.TrialSummary, bool>>(containsMethod, parameter); 

queryableTrialSummary = queryableTrialSummary.Where(finalWhere).Distinct(); 

var trials = queryableTrialSummary.Select(x => x.Trial_Code).Distinct(); 

但我發現,生成了不同的SQL語句如下;

SELECT 
    [Distinct1].[Trial_Code] AS [Trial_Code] 
    FROM (SELECT DISTINCT 
     [Extent1].[Trial_Code] AS [Trial_Code] 
     FROM [OBAR].[TrialSummary] AS [Extent1] 
     WHERE [Extent1].[Trial_MasterProtocolId] IN (N'15NOPEPYT512') 
    ) AS [Distinct1] 

我的問題是:爲什麼在上面的SQL語句中有兩個select語句,一個inner和一個outer。

難道我做錯了什麼,因爲我覺得這應該產生什麼錯在這裏,因爲我覺得這應該產生的SQL語句如下

SELECT DISTINCT 
     [Extent1].[Trial_Code] AS [Trial_Code] 
     FROM [OBAR].[TrialSummary] AS [Extent1] 
     WHERE [Extent1].[Trial_MasterProtocolId] IN (N'15NOPEPYT512') 

能否請你幫忙。

回答

0

我的問題是:爲什麼在上面的SQL語句中有兩個選擇語句,一個是內部的,另外一個是 。

您使用了兩個distinct命令,所以生成的sql將同樣包含兩個distinct。改變你的LINQ to:

var trials = queryableTrialSummary.Where(finalWhere).Select(x => x.Trial_Code).Distinct(); 

您可以使用linqPad來檢查你生成的SQL。

+0

@ user3494319我有沒有回答你的問題或沒有? – Ryan

0

問:爲什麼 有兩個選擇語句,一個內和在 一個外部上面的SQL語句。

因爲你是做兩次鮮明添加兩個表達式的表達式樹:

queryableTrialSummary.Where(finalWhere).Distinct(); 
queryableTrialSummary.Select(x => x.Trial_Code).Distinct(); 

嘗試瞭解如何應用的IQueryable和IEnumerable工作。 This is a nice blog to read.

你所尋找的是:

queryableTrialSummary.Where(finalWhere); 
queryableTrialSummary.Select(x => x.Trial_Code).Distinct();