我正在尝试使用实体框架在我的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();
答案 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();
p1
,p2
和p3
是参数
另一种方式:
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();
会是这样的。