如何正确地将lambda表达式插入另一个转换为sql的表达式?

时间:2012-11-28 16:22:01

标签: c# linq-to-sql lambda

    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) );
    }

此代码生成异常:{“Method'System.Object DynamicInvoke(System.Object [])'没有支持的SQL转换。”}

帮助修复,PLZ

UPD:

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(如果可能的话)?

1 个答案:

答案 0 :(得分:0)

出现此问题是因为EF不知道如何以本机MSSQL查询格式转换lambda表达式。

解决方案:

 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 Server配置文件来获取结果查询。