gpt4 book ai didi

c# - Linq to sql 选择一个新类

转载 作者:太空狗 更新时间:2023-10-29 18:13:33 24 4
gpt4 key购买 nike

我的问题是,当我有以下 2 个查询时,第一个没有填充 CampaignID 属性,但第二个有。这是我的代码;

查询1;

var query = from c in _context.MCTargets
where c.TargetDateFrom==d1 && c.TargetDateTo<=d2
group c by c.MarketingCampaignID into g
select new MSReport{
CampaignID = g.Key, // CampaignID is not populated here.
StartDate = d1,
EndDate = d2
};

查询2;

var query2 = from c in _context.MCTargets
where c.TargetDateFrom == d1 && c.TargetDateTo <= d2
group c by c.MarketingCampaignID into g
select new
{
CampaignID = g.Key,
StartDate = d1,
EndDate = d2
};

MSReport.cs

public class MSReport
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public int CampaignID { get; set; }

public MSReport()
{
// CampaignID = 0 here
// doing something with CampaignID here like setting some calculated properties.
}
}

提前致谢,并对我的解释不当深表歉意。

最佳答案

当使用对象初始化器语法时,初始化器中指定的值是在对象的构造函数执行后设置的。如果您需要尝试填充的值对构造函数可用,则必须添加一种构造函数形式,它将值作为参数并自行填充字段或属性。

在你的类里面:

public MSReport(int campaignID, DateTime startDate, DateTime endDate)
{
CampaignID = campaignID;
StartDate = startDate;
EndDate = endDate;

// doing something with CampaignID here like setting some calculated properties.
}

在您的查询中:

new MSReport(g.Key, d1, d2)

这将适用于 Linq to SQL 和 Linq to Objects。对于 Linq to Entities,必须采用不同的方法。

您可以使用匿名对象执行查询,然后运行第二个查询以将其转换为您想要的对象:

var query = from c in _context.MCTargets
where c.TargetDateFrom==d1 && c.TargetDateTo<=d2
group c by c.MarketingCampaignID into g
select new {
CampaignID = g.Key,
StartDate = d1,
EndDate = d2
};

IEnumerable<MSReport> queryMSReports = from item in query.AsEnumerable()
select new MSReport(item.CampaignID, item.StartDate, item.EndDate);

这会断开对象从 Linq 到 Entities 的连接,并允许您使用具有参数的构造函数创建所需的对象。查看LINQ to Entites 'parameterless constructor' error MSDN 上的论坛帖子以获取更多信息。

您的另一个选择是使用您的 MSReport 类和对象初始值设定项语法进行查询,然后在您的类上有一个您稍后必须调用的计算方法。

关于c# - Linq to sql 选择一个新类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12568587/

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