gpt4 book ai didi

c# - LINQ 查询的返回结果

转载 作者:行者123 更新时间:2023-11-30 21:46:45 25 4
gpt4 key购买 nike

LINQ 的新手,但这应该相当简单。

我正在从数据库中提取产品记录集:

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 does not contain a constructor that takes 0 parameters

最佳答案

它失败的原因是因为您正在使用属性初始值设定项方式为您的属性设置值,并且至少以您调用它的方式 (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;
}
}

() if for 当您初始化对象并调用构造函数时使用 () - () 是默认构造函数(无参数)。如果您没有创建任何其他构造函数,则会自动创建此构造函数。 See here about constructors .

现在在 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 }; 但如果您没有像原始情况那样的默认构造函数,则无法执行此操作。

关于c# - LINQ 查询的返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com