我正在使用Entity Framework构建一个asp.net mvc应用程序,我试图按列表排序。通过动态更改名称,根据数据库中存在的名称。
bids = bids.OrderBy(s => s.PublisherName);
和对象:
public string PublisherName { get { db.Publishers.Find(pubid).Name; } }
但是我得到了例外:
指定的类型成员' PublisherName' LINQ to Entities不支持。仅支持初始化程序,实体成员和实体导航属性。
我该怎么办?我怎么能让它发挥作用?
感谢。
答案 0 :(得分:3)
仅限初始值设定项,实体成员和实体导航属性 得到支持。
db.Publishers.Find(pubid).Name;
既不是初始化者也不是实体成员,也不是导航属性。
一种可能的方法是使用AsEnumerable()将其带入内存:
bids = bids.AsEnumerable().OrderBy(s => s.PublisherName);
只要出价是小的对象列表,这将完美地工作。
答案 1 :(得分:0)
我相信Bid
和Publisher
是相关的,对吗?也许这会对你有所帮助
var bids = from t in context.Bids
let u = t.Publishers.FirstOrDefault(i => i.Id == pubid)
orderby u.Name
select t;
未经测试的代码,不确定它是否适合您!
答案 2 :(得分:0)
通过LINQ使用Entity Framework时,linq语句中的所有属性都会转换为SQL。 EF只能原生地理解简单的属性。它并不了解如何翻译包含实际代码逻辑的属性,这是导致您看到的错误的原因。解决这个问题的最简单方法是在实体框架之外进行排序客户端。通常的方法是在未排序的结果上调用.ToList
,然后对结果列表进行排序,这将在客户端进行。