我正在尝试将以下SQL查询转换为linq查询,但无法执行此操作。我可以通过加入和连接一个特殊字符来帮助如何使用这种类型的案例陈述,例如' *'如果记录存在于另一个表中。请帮我解决这个问题。
Select Distinct A.MyID, Title + case when D.MyID is not null then ' *' else '' end as Title , MagTitle
FROM [MasterTitles] A left outer join TitleDetails D on A.[MyID] = D.[MyID]
WHERE [PropertyID] is not null
ORDER BY [Title]
有没有更好的选择。我已经尝试但无法弄清楚如何进行这种类型的LINQ查询。有人请指导我这个
答案 0 :(得分:1)
我稍微改变了一下查询:
var result = from x in context.MasterTitles
where x.PropertyID != null
orderby x.Title
select new { x.MyID, Title = x.TitleDetails.Any() ? x.Title + " *" : x.Title };
我已将left join
更改为EXISTS()
(.Any()
)。这样我就不需要Distinct()
答案 1 :(得分:0)
我想你需要这样的东西,不确定LINQ是否可以为?:
生成脚本,如果不是仅使用AsEnumerable
而另一个select
(from a in dc.MasterTitles
join d in dc.TitleDetails on a.MyId equals d.MyId into adJoin
from ad in adJoin.DefaultIfEmpty()
order by a.Title
selec {a.MyId, Title = a.Title + (ad != null ? "*" : ""), a.MagTitle })
.Distinct()
答案 2 :(得分:0)
尝试这种方式:
var result = database.MasterTitles.Where(m => m.PropertyID != null)
.Join(database.TitleDetails, m => m.MyID, t => t.MyID, (m, t) => new { MyID = m.MyID, Title = m.Title + (t.MyID == null ? "" : "*" ), MagTitle = m.MagTitle })
.OrderBy(m => m.Title)
.Distinct();