【发布时间】:2013-04-01 10:30:42
【问题描述】:
我有这个方法:
private string GetLanguage(String currentLanguage, dynamic entity)
{
return (currentLanguage == "de" ? entity.language.German :
currentLanguage == "fr" ? entity.language.French :
currentLanguage == "en" ? entity.language.English :
entity.language.English);
}
我需要它来返回一个执行类似 SQL 语句的 LINQ 表达式:
select (case when [french] is null then [english] else [french] end) as language
from
我怎样才能做到这一点?
Tks
编辑:
更具体一点:
我有这样的事情:
myId = 1;
from objects in context.Objects
where objects.Id== myId
select new
{
MyObject = new Models.MyObjects()
{
Id = objects.ScrId,
Title = LanguageFactory.GetLabelLanguage(objects.Labels)
}
}).FirstOrDefault();
并且 MyObject.Title 必须使用某种语言(英语、法语、荷兰语等)。 在 SQL 中,我通过执行以下操作解决了这个问题:
select id, (case when [french] is null then [english] else [french] end) as language
from table
我怎样才能做一个 LINQ 表达式,它可以被翻译成类似于上面的 SQL 查询的东西?
【问题讨论】:
-
您希望 GetLanguage 方法返回一个 linq 表达式?
-
请问如果您知道 currentLanguage 为什么要尝试生成这样的 sql。
-
是的,将在主查询中使用,具有以下内容:选择 id、名称、(当 [french] 为 null 时的情况,然后 [english] else [french] end)作为表中的语言
-
Davut,因为带有 currentLanguage 的列可能有空值,我需要查询“回退”到默认列,英语
-
为什么不在代码中查询不同的列并处理回退?您的备用方案确实不适合从 LINQ 转换为 SQL...
标签: c# .net sql linq linq-to-sql