2017-05-15 45 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();