Linq Query使用Case语句并连接特殊字符

时间:2015-03-17 09:35:29

标签: c# sql linq entity-framework

我正在尝试将以下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查询。有人请指导我这个

3 个答案:

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