使用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(),但我得到了同样的错误。
任何想法?
任何帮助都将不胜感激。
答案 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");
这解决了我的问题