【发布时间】:2018-12-26 00:29:39
【问题描述】:
我正在尝试使用 Linq 查询从我的数据库中按月组织一些特定值,但我遇到了一点麻烦,我不知道为什么会发生这种情况。
数据是这样组织的:
一个工单有很多产品,一个工人有很多工单,一个商店有很多工人,一个管理员用户有很多商店。它存在一个名为 Shops_Workers 的表,我可以在其中创建与商店和工人的关系。 Ticket 有一个带有创建日期的字段和另一个名为 Points 的字段,它为该票提供一个整数值。我需要获得每个工人为每个月有一个用户的所有商店创建的所有票的所有积分的总和。
我正在使用 EntityFramework 并尝试进行 linq 查询以获取所有数据,因此我创建了一些 DateTime 字段来获取月份并对我的 linq 查询进行子查询,但我不知道是否这可以正常工作。
Int32? admin = getCurrentUser();
DateTime TmpYear = DateTime.Now;
var result = (from s in _db.Shops
join t in db.Tickets on s.IdShop equals t.IdTicket
join sw in db.Shop_Worker on s.IdShop equals sw.IdShop
join u in db.Users on sw.IdUser equals u.IdUser
where u.IdUser == admin
select new {
Jan = s.Tickets.Where(x => x.SellDate.Value.Month == this.Jan.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Feb = s.Tickets.Where(x => x.SellDate.Value.Month == this.Feb.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Mar = s.Tickets.Where(x => x.SellDate.Value.Month == this.Mar.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Ap = s.Tickets.Where(x => x.SellDate.Value.Month == this.Ap.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
May = s.Tickets.Where(x => x.SellDate.Value.Month == this.May.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Jun = s.Tickets.Where(x => x.SellDate.Value.Month == this.Jun.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Jul = s.Tickets.Where(x => x.SellDate.Value.Month == this.Jul.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Au = s.Tickets.Where(x => x.SellDate.Value.Month == this.Au.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Sep = s.Tickets.Where(x => x.SellDate.Value.Month == this.Sep.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Oct = s.Tickets.Where(x => x.SellDate.Value.Month == this.Oct.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Nov = s.Tickets.Where(x => x.SellDate.Value.Month == this.Nov.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
Dec = s.Tickets.Where(x => x.SellDate.Value.Month == this.Dec.Month && x.SellDate.Value.Year == TmpYear.Year).Select(e => e.Points).Sum(),
});
我有一个 System.Collections.ListDictionaryInternal 错误,带有消息:
转换为值类型“System.Int32”失败,因为物化了 值为空。结果类型的泛型参数或查询 必须使用可空类型。
【问题讨论】:
标签: c# sql-server entity-framework linq datetime