返回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个形参的构造函数
失败的原因是因为您正在使用属性初始化器方式来设置属性的值,并且至少在您调用它的方式(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 };
,但你不能这样做,如果你没有一个默认的构造函数,就像你原来的情况。