使用联接字典对sql数据排序

本文关键字:sql 数据 排序 字典 | 更新日期: 2023-09-27 18:09:55

在SQL Server 2014我有一个表People与列Country (int not null)。我想按Country排序,但country是int型,我想按国家名称排序。我没有Contries表在db.

var countryDict = new Dictionary<int, string>();
countryDict.Add((int)ECountry.AT, "Austria");
countryDict.Add((int)ECountry.IT, "Włochy");
.......
IQueryable<PeopleModel> result = _entity.People.Where(...)

现在我想加入我的DbSet与字典与国家id和国家名称

// there exception occurs
var resultWithCountryName = result
    .Join(
         countryDict,
         p => (int)p.Country,
         c => c.Key,
         (p, c) => new { p, CountryName = c.Value })
    .ToList();
result = resultWithCountryName
    .OrderByDescending(p => p.Kraj)
    .Select(p => p.p)
    .AsQueryable();

毕竟我需要分页,所以我使用下面的代码。

        var resultList = result
            .Include(p => p.OtherTable) // nevermind
            .Skip(searchCriteria.Offset)
            .Take(searchCriteria.RowsOnPage)
            .ToList();

当我执行join语句时,我得到异常

无法创建类型的常数值System.Collections.Generic.KeyValuePair 2[[系统。mscorlib Int32,Version = 4.0.0.0、文化=中立,都必须要]、[系统。字符串,mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]。这里只支持基本类型或枚举类型上下文。

我的问题是

  1. 为什么我得到这个错误?

  2. 也许我对这个问题的解决方法是错误的?

使用联接字典对sql数据排序

可能给。tolist ()/AsEnumerable()/AsQueryable()到People查询的末尾。

IQueryable<PeopleModel> result = _entity.People.Where(...).ToList();