c# – Linq将sql选入一个新类

c# – Linq将sql选入一个新类,第1张

概述我的问题是,当我有2个查询后,第一个不填充CampaignID属性,而第二个查询.这是我的代码; 查询1; var query = from c in _context.MCTargets where c.TargetDateFrom==d1 && c.TargetDateTo<=d2 group c by c.Mar 我的问题是,当我有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,EndDate = d2                  };IEnumerable<MSReport> queryMSReports = from item in query.AsEnumerable()                                       select new MSReport(item.CampaignID,item.StartDate,item.EndDate);

这会将对象从linq断开连接到实体,并允许您使用具有参数的构造函数创建所需的对象.有关详细信息,请参阅MSDN上的LINQ to Entites ‘parameterless constructor’ error论坛帖子.

您的另一个选择是使用您的MSReport类和对象初始化程序语法进行查询,然后在您的类上有一个您必须稍后调用的Calculate方法.

总结

以上是内存溢出为你收集整理的c# – Linq将sql选入一个新类全部内容,希望文章能够帮你解决c# – Linq将sql选入一个新类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存