C# 如何通过实体框架按动态值排序?
我正在使用Entity Framework构建一个asp.net mvc应用程序,并尝试按列表排序。根据数据库中存在的名称,动态更改名称C# 如何通过实体框架按动态值排序?,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我正在使用Entity Framework构建一个asp.net mvc应用程序,并尝试按列表排序。根据数据库中存在的名称,动态更改名称 bids = bids.OrderBy(s => s.PublisherName); 目标是: public string PublisherName { get { db.Publishers.Find(pubid).Name; } } 但我有个例外: LINQ to实体中不支持指定的类型成员“PublisherName”。仅支持初始值设定项、实体
bids = bids.OrderBy(s => s.PublisherName);
目标是:
public string PublisherName { get { db.Publishers.Find(pubid).Name; } }
但我有个例外:
LINQ to实体中不支持指定的类型成员“PublisherName”。仅支持初始值设定项、实体成员和实体导航属性
我能做什么?我怎样才能让它工作
谢谢
仅初始值设定项、实体成员和实体导航属性
支持
db.publisher.Find(pubid.Name)代码>既不是初始值设定项,也不是实体成员,也不是导航属性
一种可能的方法是通过以下方式将其存储在内存中:
这将完美地工作,只要出价是对象的小列表 我相信Bid
和Publisher
是相关的,对吧?也许这对你有帮助
var bids = from t in context.Bids
let u = t.Publishers.FirstOrDefault(i => i.Id == pubid)
orderby u.Name
select t;
未经测试的代码,不确定它是否适用于您 通过LINQ使用实体框架时,LINQ语句中的所有属性都转换为SQL。EF只理解简单的属性。它不理解如何转换包含实际代码逻辑的属性,这正是导致您看到的错误的原因。解决此问题的最简单方法是在实体框架之外对客户端进行排序。通常的方法是对未排序的结果调用.ToList
,然后对结果列表进行排序,这将发生在客户端。只要bids
已经是一个过滤(小)对象列表,这是一个好主意。但千万不要这样做:context.Bids.AsEnumerable()…
var bids = from t in context.Bids
let u = t.Publishers.FirstOrDefault(i => i.Id == pubid)
orderby u.Name
select t;