Database 如何编写这个LINQ(或SQL)查询?

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,如下所

我有两张这样的桌子:

新闻

身份证

头衔

类语言

语言表:

语言

身份证

名字

IsDefault

现在使用LanguageId作为参数(例如en US),默认语言为en GB,我希望得到如下值:

新闻

Id标题语言Id

1美国

2美国

…美国新闻

10英国标

11欧洲标准

…剩余的en GB新闻,因为en GB是默认值

20 fr fr

21 fr fr

…其他剩余语言的新闻


当前的解决方案是使用临时表和游标获取每种语言的新闻。有更好的方法吗?

您可以使用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}