2

という名前のテーブルがPollあり、配列に属する ID を持つすべてのポーリングを一覧表示する LINQ 拡張機能を作成したいとします。例:

void Main()
{
    long[] ids = new long[]{ 1,2,3,4,5,6,7,8,9 };

    ListFail<Poll>(Poll, p => p.ID, ids); //Failed!
    ListOK<Poll>(Poll, p => p.ID, ids); //OK!
}

public void ListFail<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class
{
    obj.Where(p => ids.Contains(idProperty(p))).ToList().Dump();
}

public void ListOK<T>(Table<T> obj, Func<T, long> idProperty, long[] ids) where T : class
{
    obj.ToList().Where(p => ids.Contains(idProperty(p))).ToList().Dump();
}

エラーが発生する理由がわかりませんListFail

Method 'System.Object DynamicInvoke(System.Object[])' has no supported translation to SQL.

ToList()前に追加したときはWhereうまくいきましたが、もちろんテーブルListOK全体を取得したくありません。Poll

何か案が?

4

1 に答える 1

2

に変更Func<T, long>Expression<Func<T, long>>ます。現在、このため、EF はそれを理解していません。

于 2011-06-03T11:47:33.850 に答える