SqlFunctions包装器

时间:2011-10-20 02:47:35

标签: c# .net entity-framework sql-function

我想在我的解决方案中的不同项目中的许多地方使用SqlFunctions.StringConvert()

我不希望每个项目都引用system.data.entity,所以我决定在我的Common项目中放置一个包装器(所有其他项目都引用Common)。

我怎么写这样的包装?如果我在做:

public static class SqlUtils
{
    public static Func<decimal?, string> StringConvert()
    {
        return x => SqlFunctions.StringConvert(x);
    }

    public static Func<double?, string> StringConvert()
    {
        return x => SqlFunctions.StringConvert(x);
    }        
}

然后我不能像以下那样使用它:

query.Where(x => SqlUtils.StringConvert((decimal)x.SerialNumber).Contains(serialNumber));

因为实体框架不知道方法SqlUtils.StringConvert。

任何想法怎么做?

2 个答案:

答案 0 :(得分:0)

你可以像下面这样包装函数,但我觉得它没有意义:

public static class SqlUtils
{
    public static string StringConvert(double? x)
    {
        return SqlFunctions.StringConvert(x);
    }

    public static string StringConvert(decimal? x)
    {
        return SqlFunctions.StringConvert(x);
    }
}

答案 1 :(得分:0)

如果您希望EF能够将其全部翻译为SQL,则需要做更多工作,请参阅:http://blogs.microsoft.co.il/blogs/gilf/archive/2010/01/01/defining-custom-functions-in-entity-framework.aspx