LINQ To Entities无法生成字符串MVC Razor

时间:2012-09-07 20:14:01

标签: asp.net-mvc asp.net-mvc-3 linq razor linq-to-entities

使用LINQ获取信息时,我使用以下方法

var salt_water_disposals = _SaltWaterDisposals.SaltWaterDisposals.Select(sw => new SaltWaterModel
            {

                saltwater_ID = sw.SaltWaterDisposalID,
                lease = sw.Lease.LeaseName,
                field = sw.Lease.Field.Name.ToLower(),
                permitter_fluid = sw.PermittedFluids.Count == 0 ? "None" : sw.PermittedFluids.Aggregate("", (current, c) => current+c.Fluid.Name),
                max_gas_pressure = sw.MaxGasInjectionPressure,

            });

然而,当我运行代码时,由于PermittedFluids,我得到以下错误:

  

LINQ to Entities无法识别方法'System.String   骨料[PermittedFluid,字符串](System.Collections.Generic.IEnumerable 1[FieldPro.Domain.Entities.PermittedFluid], System.String, System.Func 3 [System.String,FieldPro.Domain.Entities.PermittedFluid,System.String])”   方法,并且此方法无法转换为商店表达式。

我已经尝试将它也用作ToString(),但我得到了同样的错误。

任何想法?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可能知道,LINQ会将您的代码转换为SQL语句。它无法翻译所有代码,这就是其中一种情况。

System.Data.Objects.SqlClient.SqlFunctions是一个具有许多在LINQ上下文中有效的静态方法的类。

答案 1 :(得分:0)

我通过取出Aggregate调用并在我的视图中调用它并更改数据类型或者permitter_fluid来修复此问题。

所以我的模特有:

public System.Data.Objects.DataClasses.EntityCollection<FieldPro.Domain.Entities.PermittedFluid> permitter_fluid { get; set; }

我的控制器有:

permitter_fluid = sw.PermittedFluids,

我的观点(使用MvCContrib的Html.Grid):

column.For(m => m.permitter_fluid.Aggregate("", (current, c) => current + c.Fluid.Name)).Named("Permitted Fluid");

这解决了我的问题