1
    internal IEnumerable<Setting> Search(string text)
    {
        Func<string, string, bool> searchCI =
            (x, y) => x.IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0;
        return _dc.Settings.Where(
            x => searchCI(x.key, text)
                || searchCI(x.description, text) );
    }

このコードは例外を生成します: {"メソッド 'System.Object DynamicInvoke(System.Object[])' は SQL への変換をサポートしていません。"}

修正を手伝ってください、plz

更新:

internal IEnumerable<Setting> Search(string text)
{
    return _dc.Settings.Where(
        x => x.key.IndexOf(text).StringComparison.OrdinalIgnoreCase) >= 0
            || x.description.IndexOf(text).StringComparison.OrdinalIgnoreCase) >= 0;
}

これは機能しますが、コードが重複しています。部分式を sql にコンパイルできるようにするにはどうすればよいですか (可能な場合)。

4

1 に答える 1

0

この問題は、EFがラムダ式をネイティブMSSQLクエリ形式に変換する方法を知らないために発生します。

解決:

 internal IEnumerable<Setting> Search(string text)
    {
        Func<string, string, bool> searchCI =
            (x, y) => x.IndexOf(y, StringComparison.OrdinalIgnoreCase) >= 0;
        return _dc.Settings.ToList().Where(
            x => searchCI(x.key, text)
                || searchCI(x.description, text) );
    }

SQLサーバープロファイルを使用して、結果クエリを取得できます。

于 2012-12-28T20:07:23.010 に答える