所以我有这三个表:
日期:
int Id
DateTime RunDate
int ArticleId
的文章:
int Id
int Barcode
String Name
int Days
int GroupNumber
的组:
int Id
int Number
String Name
int Days
我想要的是Article
和Date.RunDate
的所有条目,其中Date.RunDate
减去Article.Days
小于DateTime.Now
。但是Article.Days
可能为空,如果为空,则必须提取Group.Days
,其中Article.GroupNumber
和Group.Number
匹配(Group.Number
是唯一的)。
我当前的查询仅使用Article.Days:
var query = from dates in dbdate.Dates
join article in dbarticle.Articles on dates.ArticleBarcode equals article.Barcode
where dates.RunDate.Subtract(new TimeSpan(article.Days, 0, 0, 0)) > DateTime.Now
select article;
答案 0 :(得分:0)
您应该使用DbFunctions.AddDays
。然后,您可以使用??
null合并运算符来获得正确的减去天数。
var query = from date in dbdate.Dates
join article in dbarticle.Articles on date.ArticleBarcode
equals article.Barcode
let days = article.days
?? db.Groups.Where(g => g.Number == article.GroupNumber)
.Select(g => g.Days).FirstOrdefault()
?? 0
where DbFunctions.AddDays(date.RunDate, days * -1) > DateTime.Now
select article;