データ型を返すためにデリゲート型を定義しようとしています。すべての種類の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は、EDMプリミティブまたは列挙型のキャストのみをサポートします。
エラーメッセージは非常に私には意味がありませんが、私はこれは、デリゲートがIQueryable<TextValuePair>
代わりのIQueryable<object>
を返すという事実に関係していると信じています。
実際にはIQueryable
を返すことができるように、この代理人が必要です。ちょうどListBox.ItemsSource
が任意の種類のコレクションを受け入れるようにしてください。
誰もこれを回避する方法を見ているのですか、エラーメッセージをよく理解していますか?
のようないくつかの一般的なクラスには本当にプロジェクトべきちょうど 'IQueryable'代わりに'のIQueryable 'のを返さないのはなぜ? –
dotctor
@dotctor: 'IQueryable'は' ToList() 'メソッドを持っていません。 –
これを確認してください(http://stackoverflow.com/a/37853007/3970411) – dotctor