Я пытаюсь определить тип делегата для возврата моего набора данных.Возвращение IQueryable любого типа
public Func<ArticleServerEntities, object, IQueryable<object>> GetItemsSource { get; set; }
Вот как я его заполняю.
class TextValuePair
{
public string Text { get; set; }
public object Value { get; set; }
}
GetItemsSource = (ctx, val) => ctx.Set<Category>()
.OrderBy(c => c.Title)
.Select(c => new TextValuePair { Text = c.Title, Value = c.Id }),
И вот как я это называю.
using (var context = new ArticleServerEntities())
{
action.ListBox.ItemsSource = action.GetItemsSource(context, parentValue).ToList();
}
Но вызов его вызывает исключение System.NotSupportedException
.
Невозможно ввести тип 'System.Int32' для ввода 'System.Object'. LINQ to Entities поддерживает только листинг EDM-примитивов или типов перечислений.
Хотя сообщение об ошибке не совсем имеет смысла для меня, я считаю, что это связано с тем, что делегат возвращает IQueryable<TextValuePair>
вместо IQueryable<object>
.
Но на практике мне нужен этот делегат, чтобы иметь возможность возвращать IQueryable
любого вида - так же, как ListBox.ItemsSource
принимает коллекцию любого типа.
Кто-нибудь видит способ обойти это или лучше понять сообщение об ошибке?
Почему не возвращаются просто 'IQueryable' вместо' 'IQueryable ? –
dotctor
@dotctor: 'IQueryable' не имеет метода' ToList() '. –
Отметьте это [ответ] (http://stackoverflow.com/a/37853007/3970411) – dotctor