在不转换为存储表达式的情况下在LINQ中获取结果函数我需要从需要在LINQ查询中运行的函数中获取结果。此结果绑定到网格,但在运行时我收到此错误:LINQtoEntities无法识别方法“System.StringGetName(System.Type,System.Object)”方法,并且此方法无法转换为商店表达。这是我的代码:publicIQueryableGetForRah_CapacityList(XQueryParamparam){varresult=(fromxinData()selectnew{Rah_CapacityId=x.Rah_CapacityId,Rah_CapacityName=x.Rah_CapacityName,Rah_St=Enum.GetName(typeof(Domain.Enums.CapacityState),x.Rah_St),Rah_LinesId=x.Rah_LinesId}).OrderByDescending(o=>new{o.Rah_CapacityId});返回结果;您不能在Linq-To-Entities中使用此方法,因为LINQ不知道如何将Enum.GetName转换为sql。因此,使用AsEnumerable在Linq-To-Objects的内存中执行此操作,并在查询后使用AsQueryable以获得所需的AsQueryable:因此:varresult=Data().OrderBy(x=>x.CapacityId)。AsEnumerable().Select(x=>new{Rah_CapacityId=x.Rah_CapacityId,Rah_CapacityName=x.Rah_CapacityName,Rah_St=Enum.GetName(typeof(Domain.Enums.CapacityState),x.Rah_St),Rah_LinesId=x.Rah_LinesId}).AsQueryable();在使用AsEnumerable之前应首先使用OrderBy以从数据库排序性能中获益。Where也是一样,总是在AsEnumerable(或ToList)之前做。GetName无法转换为T-SQL,LinqtoEntities无法识别。可以修改代码如下:varresult=(fromxinData().AsEnumerable()selectnew{Rah_CapacityId=x.Rah_CapacityId,Rah_CapacityName=x.Rah_CapacityName,Rah_St=Enum.GetName(typeof(Domain.Enums.CapacityState),x.Rah_St),Rah_LinesId=x.Rah_LinesId}).OrderByDescending(o=>new{o.Rah_CapacityId});加载数据后使用.ToList(),对已在内存中的数据执行任何进一步的LinqtoObjects操作(例如选择)。编辑:您的方法的返回类型是IQueryable并且您的查询是匿名类型的IOrderedEnumerable,因此您应该将方法的类型更改为System.Object或者作为更好的解决方案创建一个类,将值发送到类的属性,并归还。以上是C#学习教程:在LINQ中获取结果函数,无需将其转换为存储表达式。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
