c# - 使用导航将 SQL Distinct、Count 和 GroupBy 转换为 Linq 查询

标签 c# linq

我在 LINQ 中有这个查询,其中 query 是来自表 LeadSales 的预定义 IQueryable...

var results = from q in query
    select new LeadBuyersByStateItem {
        ContactID = q.SoldToContactID,
        FirstName = q.Contact.FirstName,
        LastName = q.Contact.LastName
     };

它工作正常,但我需要稍微调整一下。我在 SQL 中也有这个:

SELECT
    SoldToContactID, 
    COUNT (SoldToContactID) AS Count
FROM
    LeadSales
GROUP BY 
    SoldToContactID

按预期返回此数据集:

enter image description here

现在,我需要将 LINQ 查询转换为具有 GROUP BY,并包括计数,当然还要保留导航以便我可以访问 FirstName 和 LastName。

我在使用 LINQ 语法时遇到问题...

var results = from q in query
    group q by q.SoldToContactID into g
    select new LeadBuyersByStateItem {
        ContactID = ?.SoldToContactID,
        FirstName = ?.Contact.FirstName,
        LastName = ?.Contact.LastName
        ContactCount = ????
     };

仅供引用...

public class LeadBuyersByStateItem
{
    public int ContactID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ContactCount { get; set; }
}

最佳答案

我想这就是您要找的:

var results = from q in query
    group q by new {q.SoldToContactID,
                    FirstName=q.Contact.FirstName,
                    LastName=q.Contact.LastName} into g
    select new LeadBuyersByStateItem {
        ContactID = g.Key.SoldToContactID,
        FirstName = g.Key.FirstName,
        LastName = g.Key.LastName,
        ContactCount = g.Count()
     };

您需要使用匿名类型按多个列进行分组

关于c# - 使用导航将 SQL Distinct、Count 和 GroupBy 转换为 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42795176/

相关文章:

c# - 将关系数据集转换为 List<T>

c# - WPF:从 XAML 设置 ViewModel,为什么第二个解决方案不起作用?

c# - ServiceStack:AppHost 不支持通过单例访问当前请求

c# - 内存中集合的 Linq 性能

c# - 如何在字典中查找值> 0且键与特定字符串模式匹配的键值对?

c# - 如何通过重复 get 和 setter 来缩短属性

c# - 序列化作为通用 List<> 的基类时,WCF 调用失败

c# - 为什么 LINQ 运算符被定义为 IEnumerable 接口(interface)上的扩展方法,而不是接口(interface)本身的一部分? C#

c# - 使用连接但条件不同的相同 LINQ 查询

asp.net - 查询LINQ to SQL关系