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

时间:2015-12-03 09:24:16

标签: 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; } }

但是我得到了例外:

  

指定的类型成员' PublisherName' LINQ to Entities不支持。仅支持初始化程序,实体成员和实体导航属性。

我该怎么办?我怎么能让它发挥作用?

感谢。

3 个答案:

答案 0 :(得分:3)

  

仅限初始值设定项,实体成员和实体导航属性   得到支持。

db.Publishers.Find(pubid).Name;既不是初始化者也不是实体成员,也不是导航属性。

一种可能的方法是使用AsEnumerable()将其带入内存:

bids = bids.AsEnumerable().OrderBy(s => s.PublisherName);

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

答案 1 :(得分:0)

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

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