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

前端之家收集整理的这篇文章主要介绍了c# – Linq将sql选入一个新类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是,当我有2个查询后,第一个不填充CampaignID属性,而第二个查询.这是我的代码;

查询1;

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

查询2;

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

MSReport.cs

  1. public class MSReport
  2. {
  3. public DateTime StartDate { get; set; }
  4. public DateTime EndDate { get; set; }
  5. public int CampaignID { get; set; }
  6.  
  7. public MSReport()
  8. {
  9. // CampaignID = 0 here
  10. // doing something with CampaignID here like setting some calculated properties.
  11. }
  12. }

提前谢谢,抱歉我的解释不好.

解决方法

使用对象初始值设定项语法时,初始化程序中指定的值将在执行对象的构造函数后设置.如果需要将要填充的值用于构造函数,则必须添加构造函数的形式,该值将值作为参数并填充字段或属性本身.

在你的班上:

  1. public MSReport(int campaignID,DateTime startDate,DateTime endDate)
  2. {
  3. CampaignID = campaignID;
  4. StartDate = startDate;
  5. EndDate = endDate;
  6.  
  7. // doing something with CampaignID here like setting some calculated properties.
  8. }

在您的查询中:

  1. new MSReport(g.Key,d1,d2)

这适用于Linq to sql和Linq to Objects.对于Linq to Entities,必须采取不同的方法.

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

  1. var query = from c in _context.MCTargets
  2. where c.TargetDateFrom==d1 && c.TargetDateTo<=d2
  3. group c by c.MarketingCampaignID into g
  4. select new {
  5. CampaignID = g.Key,EndDate = d2
  6. };
  7.  
  8. IEnumerable<MSReport> queryMSReports = from item in query.AsEnumerable()
  9. select new MSReport(item.CampaignID,item.StartDate,item.EndDate);

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

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

猜你在找的C#相关文章