使用连接字典

时间:2015-08-25 13:28:40

标签: c# .net sql-server linq entity-framework

在SQL Server 2014中,我有一个表People,其中包含列Countryint not null)。我想按Country排序行,但country是int,我想按国家/地区名称排序。我在db。中没有Contries表。

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 [[System.Int32,mscorlib,   版本= 4.0.0.0,文化=中立,   PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'。   此处仅支持原始类型或枚举类型   上下文。

我的问题是

  1. 为什么会出现此错误?

  2. 也许我对这个问题的解决方案有误?

1 个答案:

答案 0 :(得分:0)

可能会将.ToList()/ AsEnumerable()/ AsQueryable()提供给People查询结束。

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