返回LINQ查询结果

本文关键字:结果 查询 LINQ 返回 | 更新日期: 2023-09-27 18:03:03

LINQ新功能,但这应该相当简单。

我正在从DB中提取产品的记录集:

ReportData= topProductsController.GetWowDetails(CurrentUser.UserId, _companyGroupCode, sector, year, string.Empty, string.Empty, string.Empty);

和从该记录集,我试图按产品ID和计数分组的结果:

var productCounts = (from record in wowReportData
                        group record by record.ProductID into grouping
                                 select new topProduct { Name = grouping.Key, quantity = grouping.Count() });

这是我要返回的类:

public class topProduct
{
    public int quantity { get; set; }
    public string Name { get; set; }
    public topProduct(string productDesc, int downloadCount)
    {
        this.Name = productDesc;
        this.quantity = downloadCount;
    }
}

我试图从函数返回这些列表。当前的错误是:

topProduct不包含接受0个形参的构造函数

返回LINQ查询结果

失败的原因是因为您正在使用属性初始化器方式来设置属性的值,并且至少在您调用它的方式(new topProduct {...)中,它将首先使用默认构造函数初始化对象。但是你没有。

改成:

var productCounts = (from record in wowReportData
                     group record by record.ProductID into grouping
                     select new topProduct(grouping.Key, grouping.Count()));

或者添加一个默认构造函数(我就是这么做的),然后你可以像使用

一样使用它
public class topProduct
{
    public int quantity { get; set; }
    public string Name { get; set; }
    //default constructor
    public topProduct() {}
    public topProduct(string productDesc, int downloadCount)
    {
        this.Name = productDesc;
        this.quantity = downloadCount;
    }
}

()的使用,如果你初始化一个对象,你调用一个构造函数- ()是默认的构造函数(没有参数)。在您没有创建任何其他构造函数的情况下,将自动创建这个构造函数。参见这里的构造函数。

现在在c# 3.5中,如果我没有弄错的话,他们引入了在对象初始化的同时内联初始化属性的能力,从而省去了为所有不同的选项创建一个大的构造函数数组的痛苦。但这只是对:

的一个很好的语法糖
var obj = new Class() { Prop1 = "a", Prop2 = 2 };
        ||
var obj = new Class();
obj.Prop1 = "a";
obj.Prop2 = 2;

然后他们甚至允许你删除空的()(在你调用的构造函数是默认构造函数的情况下),你原来有:var obj = new Class { Prop1 = "a", Prop2 = 2 };,但你不能这样做,如果你没有一个默认的构造函数,就像你原来的情况。