linq查询中的if-condition(从多个数据库中获取)

时间:2014-02-04 12:19:07

标签: sql linq entity-framework

所以我有这三个表:

日期:

int Id
DateTime RunDate
int ArticleId


文章:

int Id
int Barcode
String Name
int Days
int GroupNumber


组:

int Id
int Number
String Name
int Days

我想要的是ArticleDate.RunDate的所有条目,其中Date.RunDate减去Article.Days小于DateTime.Now。但是Article.Days可能为空,如果为空,则必须提取Group.Days,其中Article.GroupNumberGroup.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;

1 个答案:

答案 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;