Database 如何编写这个LINQ(或SQL)查询?
我有两张这样的桌子: 新闻 身份证 头衔 类语言 语言表: 语言 身份证 名字 IsDefault 现在使用LanguageId作为参数(例如en US),默认语言为en GB,我希望得到如下值: 新闻 Id标题语言Id 1美国 2美国 …美国新闻 10英国标 11欧洲标准 …剩余的en GB新闻,因为en GB是默认值 20 fr fr 21 fr fr …其他剩余语言的新闻Database 如何编写这个LINQ(或SQL)查询?,database,linq,tsql,Database,Linq,Tsql,我有两张这样的桌子: 新闻 身份证 头衔 类语言 语言表: 语言 身份证 名字 IsDefault 现在使用LanguageId作为参数(例如en US),默认语言为en GB,我希望得到如下值: 新闻 Id标题语言Id 1美国 2美国 …美国新闻 10英国标 11欧洲标准 …剩余的en GB新闻,因为en GB是默认值 20 fr fr 21 fr fr …其他剩余语言的新闻 当前的解决方案是使用临时表和游标获取每种语言的新闻。有更好的方法吗?您可以使用ORDERBY语句来创建tsql,如下所
当前的解决方案是使用临时表和游标获取每种语言的新闻。有更好的方法吗?您可以使用ORDERBY语句来创建tsql,如下所示
ORDER BY CASE LanguageId WHEN 'en-US' THEN 0 WHEN 'en-GB' THEN 1 ELSE 2 END
经过一些工作,我的LINQ查询是:
List<News> GetNews(string languageId)
{
var languages = db.Languages.ToDictionary(l => l.Id, l => l.IsDefault);
var news = db.News.Where(<filter condition>).ToList(); //(otherwise LINQ to Entities will not be able to recognize my custom function)
news = news.OrderByDescending(n=>n.LanguageId == languageId).ThenByDescending(n=> OrderByLang(a.LanguageId, languages)).ToList();
}
private bool OrderByLang(string languageId, Dictionary<string, bool> languages)
{
return (languages[languageId]);
}
List GetNews(string languageId)
{
var languages=db.languages.ToDictionary(l=>l.Id,l=>l.IsDefault);
var news=db.news.Where().ToList();/(否则LINQ to Entities将无法识别我的自定义函数)
news=news.OrderByDescending(n=>n.LanguageId==LanguageId)。然后是ByDescending(n=>OrderByLang(a.LanguageId,languages)).ToList();
}
私有bool OrderByLang(字符串语言ID、字典语言)
{
返回(语言[languageId]);
}
它按预期工作,但需要将整个表返回到应用程序层进行分页,这不是很理想。还有其他建议吗?找到正确的语言顺序是这里的关键(这与您得到的类似):
来自数据库语言中的lang
按lang排序。LanguageId==LanguageId递减,
lang.IsDefault正在下降,
郎的名字
然后添加连接:
来自数据库语言中的lang
在lang.LanguageId上的db.NewsItems中加入newsItem等于newsItem.LanguageId
按lang排序。LanguageId==LanguageId递减,
lang.IsDefault正在下降,
郎的名字
选择新{newsItem.Id,newsItem.Title,lang.Name}