选择中的 Linq toEntity 自定义函数

标签 linq linq-to-entities

在 Linq to Entities 中,不能使用标准 C# 方法来修改“select”子句中的结果,需要规范函数。

我需要调用这样的查询:

CoreEntities.Contracts.Select(
c=> new {
   c.Name,
   c.Type,
   Role = MapToRole(c));

private string MapToRole(Contract contract) {
    switch(contract.Type) {
        case: CTypes.Main: return "somerole1";break;
        case: CTypes.Secondary: return "somerole2";break;
        // ... 
        default: break;
    }

    return "none";
}

“MapToRole”是一个 C# 方法,创建的目的只是为了整理 linq 查询。

有没有办法创建 Entity Framework “linq to Entity”解析器接受的自定义 C# 函数?

我找到了查询过滤器的解决方案,但没有找到数据格式化的解决方案。

最佳答案

看起来,由于这是一个简单的转换,因此没有理由需要由提供者进行翻译。我建议只需在 Select() 之前添加 AsEnumerable() 即可将您的投影与提供程序“分离”。

或者,您可以在数据类型中拥有一个 CTypes 属性,以及在模型中执行该属性转换的方法/属性。


顺便说一句,在应用程序层中执行此特定转换意味着您仅提取枚举值,而不是字符串 - 因此来自提供程序的数据较少。

关于选择中的 Linq toEntity 自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981574/

相关文章:

linq-to-entities - LINQ to Entities 是否支持 'where' 子句谓词中的 IEquatable?

c# - Linq 查询返回 IQueryable<IEnumerable<User>> 而不是 IQueryable<User>

c# - 如何返回自定义匿名类型?

c# - 异步/等待中的多个查询(错误 : IEnumerable does not contain ToListAsync())

c# - linq-To-Sql:使用枚举(标志)进行过滤

c# - Linq to Entities 在 Where 中使用自定义方法

c# - Linq 左连接可空字段

asp.net-mvc - Linq to Sql vs Nhibernate vs SubSonic vs 存储过程(帮助)

c# - 在具有 Entity Framework 奇怪行为的循环中构建查询

entity-framework - EF6 查询预编译