使用GROUP BY和COUNT(DISTINCT)的LINQ to SQL

使用GROUP BY和COUNT(DISTINCT)的LINQ to SQL,第1张

使用GROUP BY和COUNT(DISTINCT)的LINQ to SQL

尚无直接支持

COUNT(DISTINCT {x}))
,但您可以从
IGrouping<,>
(即
group by
返回什么)中进行模拟。恐怕我只“做”
C#,所以您必须转换为VB。

 select new {     Foo= grp.Key,     Bar= grp.Select(x => x.SomeField).Distinct().Count() };

这是罗斯文(Northwind)的示例

    using(var ctx = new DataClasses1DataContext())    {        ctx.Log = Console.Out; // log TSQL to console        var qry = from cust in ctx.Customers       where cust.CustomerID != ""       group cust by cust.Country       into grp       select new       {Country = grp.Key,Count = grp.Select(x => x.City).Distinct().Count()       };        foreach(var row in qry.OrderBy(x=>x.Country))        { Console.WriteLine("{0}: {1}", row.Country, row.Count);        }    }

TSQL不是我们想要的,但是可以完成工作:

SELECT [t1].[Country], (    SELECT COUNT(*)    FROM (        SELECt DISTINCT [t2].[City]        FROM [dbo].[Customers] AS [t2]        WHERe ((([t1].[Country] IS NULL) AND ([t2].[Country] IS NULL)) OR (([t1].[Country] IS NOT NULL) AND ([t2].[Country] IS NOT NULL) AND ([t1].[Country] = [t2].[Country]))) AND ([t2].[CustomerID] <> @p0)        ) AS [t3]    ) AS [Count]FROM (    SELECt [t0].[Country]    FROM [dbo].[Customers] AS [t0]    WHERe [t0].[CustomerID] <> @p0    GROUP BY [t0].[Country]    ) AS [t1]-- @p0: Input NVarChar (Size = 0; Prec = 0; Scale = 0) []-- Context: SqlProvider(Sql2008) Model: AttributedmetaModel Build: 3.5.30729.1

但是,通过手动运行结果可以正确验证:

        const string sql = @"SELECt c.Country, COUNT(DISTINCT c.City) AS [Count]FROM Customers cWHERe c.CustomerID != ''GROUP BY c.CountryORDER BY c.Country";        var qry2 = ctx.ExecuteQuery<QueryResult>(sql);        foreach(var row in qry2)        { Console.WriteLine("{0}: {1}", row.Country, row.Count);        }

具有定义:

class QueryResult{    public string Country { get; set; }    public int Count { get; set; }}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5440896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存