Linq Distinct SQL Statementet

问题描述 投票:0回答:2

我试图使用Distinct()与一些iqueryable下面的代码:

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();

但是我发现为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语句,一个是内部语句,另一个是外部语句。

我做错了什么,因为我认为这会产生错误,因为我认为这应该产生如下的SQL语句

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

能否请你帮忙。

c# linq linq-to-entities distinct expression-trees
2个回答
0
投票

我的问题是:为什么在上面的SQL语句中有两个select语句,一个是内部语句,另一个是外部语句。

您使用了两个distinct命令,因此生成的sql也将包含两个distinct。将您的linq更改为:

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

您可以使用linqPad检查生成的SQL。


0
投票

问题:为什么在上面的SQL语句中有两个select语句,一个是内部语句,另一个是外部语句。

因为您通过两次Distinct向表达式树添加两个表达式:

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();
© www.soinside.com 2019 - 2024. All rights reserved.