2015-12-03 2 views
2

Я создаю приложение mpc asp.net с использованием Entity Framework, и я пытаюсь заказать список. Динамическим измененным именем в соответствии с именем существует в базе данных.Как заказать Динамическое значение через Entity Framework?

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

и объект:

public string PublisherName { get { db.Publishers.Find(pubid).Name; } } 

Но я получаю исключение:

Указанный тип члена 'PublisherName' не поддерживается в LINQ к Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности.

Что я могу сделать? И как я могу заставить его работать?

Спасибо.

ответ

3

Поддерживаются только инициализаторы, элементы сущности и свойства навигации сущности .

db.Publishers.Find(pubid).Name; не является ни инициатором, ни субъектом сущности, ни навигационным свойством.

Одним из возможных способов является приведение его в память с AsEnumerable():

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

Это будет прекрасно работать, пока ставки небольшой список объектов.

+1

Пока 'bids' уже является фильтрованным (небольшим) списком объектов, это хорошая идея. Никогда не делайте этого, хотя: 'context.Bids.AsEnumerable() ...' –

0

Я считаю, Bid и Publisher связаны, верно? Возможно, это поможет вам

var bids = from t in context.Bids 
      let u = t.Publishers.FirstOrDefault(i => i.Id == pubid) 
      orderby u.Name 
      select t; 

Неиспользованный код, не уверен, что он сработает для вас!

0

При использовании Entity Framework через LINQ все свойства в выражении linq преобразуются в SQL. EF только изначально понимает простые свойства. Он не понимает, как переводить свойства, содержащие фактическую логику кода, что и вызывает ошибку, которую вы видите. Самый простой способ исправить это - сделать клиентскую сторону сортировки вне рамки сущности. Обычный способ сделать это - вызвать .ToList на несортированный результат, а затем отсортировать полученный список, который будет на стороне клиента.

Смежные вопросы