如何通过实体框架按动态值排序
本文关键字:动态 排序 框架 何通过 实体 | 更新日期: 2023-09-27 18:25:24
我正在使用实体框架构建一个asp.net mvc应用程序,并尝试按列表排序。通过动态更改名称,根据数据库中存在的名称。
bids = bids.OrderBy(s => s.PublisherName);
和对象:
public string PublisherName { get { db.Publishers.Find(pubid).Name; } }
但我遇到了一个例外:
LINQ to Entities中不支持指定的类型成员"PublisherName"。仅支持初始值设定项、实体成员和实体导航属性。
我能做什么?我该如何让它发挥作用?
谢谢。
仅初始值设定项、实体成员和实体导航属性支持。
db.Publishers.Find(pubid).Name;
既不是初始值设定项,也不是实体成员,也不是导航属性。
一种可能的方法是使用AsEnumerable()将其放入内存:
bids = bids.AsEnumerable().OrderBy(s => s.PublisherName);
只要出价是小的对象列表,这将完美地工作。
我相信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
,然后对结果列表进行排序,这将在客户端进行。