如何通过实体框架按动态值排序

本文关键字:动态 排序 框架 何通过 实体 | 更新日期: 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);

只要出价是小的对象列表,这将完美地工作。

我相信BidPublisher是相关的,对吧?也许这会帮助你

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,然后对结果列表进行排序,这将在客户端进行。