select 中的 Linq to entities 自定义函数

Linq to entities custom function in select

在 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() 到 "detach" 您的供应商预测。

或者,您可以在数据类型中使用 CTypes 属性,在模型中执行转换的 method/property。


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