linq查询中的条件语句

时间:2016-12-19 16:18:31

标签: c# linq

我正在尝试使用实体框架在我的linq查询中复制MS Access“IIf”语句。

如果Journal.Frequency =“Ad hoc”且Journal.AdHocRecoMonth<> “提供推荐”然后在列表中包括期刊。

以下是整个查询:

SELECT DISTINCT Users.ID as UserID, Users.FirstName, Users.Surname,User.ADID 
FROM Users INNER JOIN Journals ON Users.ID = Journals.UserID 
WHERE(((Journals.CompanyID) = {1}) AND((Journals.RRDD) = '{2}') AND 
((IIf([Journals].[Frequency] = 'Ad hoc' And [Journals].[AdHocRecoMonth] <> '{0}', 'NO', 'YES')) = 'YES'));

到目前为止,我的代码不包含if语句:

 var fUsers  = (from u in db.Users from j in u.Journals
                where j.CompanyID == companyID
                where j.RRDD == RRDD
                select u).Distinct();

3 个答案:

答案 0 :(得分:1)

我认为您的SQL查询的翻译可能是:

var query=(from u in db.Users
           from j in u.Journals
           where j.CompanyID==p1 && j.RRDD==p2 && !(j.Frequency == "Ad hoc" && j.AdHocRecoMonth != p3)
           select u).Disctinct();

p1p2p3是参数

另一种方式:

var query=db.Users.Where(u=> u.Journals.Any(j=>j.CompanyID==p1 
                                            && j.RRDD==p2 
                                            && !(j.Frequency == "Ad hoc" && j.AdHocRecoMonth != p3)));

答案 1 :(得分:0)

这有用吗?我不确定因为我无法测试它。将其添加到其他where以下:

where ((j.Frequency == "Ad hoc" && j.AdHocRecoMonth <> "provided recomonth" ? "NO" : "YES") == "YES")

这是the ternary operator的示例,它基本上等同于您的IIF声明。

注意:我不确定您的搜索字词的大写是否重要,但它应该是您所知道的。例如,如果j.Frequency等于"ad hoc"(全部小写)......

,会发生什么

答案 2 :(得分:0)

 var fUsers  = (from u in db.Users from j in u.Journals
                where j.CompanyID == companyID
                and j.RRDD == RRDD
                and ((j.Frequency == "Ad hoc" 
                and j.AdHocRecoMonth != {0} ? "NO" : "YES") == "YES")
                select u).Distinct();

会是这样的。