Linq 到选择中的实体自定义函数



在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 查询。

有没有办法创建一个被实体框架"linq to Entity"分析器接受的自定义 c# 函数?

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

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

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


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

最新更新