LINQ to Entities创建动态字段

时间:2014-06-27 15:11:05

标签: c# linq entity-framework linq-to-entities entity-framework-5

我正在尝试使用LINQ to Entities w / EF5创建一个动态字段。基于某些条件(我已将其封装在函数中),动态字段将填充不同的值。

我引用了帖子here但是当我运行下面的代码时,我收到了以下错误:

LINQ to Entities无法识别方法'System.String FormatName()'方法,并且此方法无法转换为商店表达式。

    public static IEnumerable<dynamic> SelectAllCustomers()
    {
        using (var db = new DatabaseContext())
        {
            var query = db.Customer.Select(c => new
                         {
                             c.ID,
                             FullNameLastFirstMiddle = FormatName(c.First_Name, c.Middle_Name, c.Last_Name),
                         }
                        );

            return query.ToList();
        }
    }

    private static string FormatName(string first, string middle, string last) 
    {
        //format name 
        if (!String.IsNullOrWhiteSpace(first))
        {
            if (!String.IsNullOrWhiteSpace(middle))
                return last + ", " + first + " " + middle;
            else
                return last + ", " + first;
        }
        else
        {
            if (!String.IsNullOrWhiteSpace(middle))
                return last + ", " + middle;
            else
                return last;
        }
    }

关于如何使用LINQ to Entities动态构建具有sofisticated逻辑的字段的任何想法?

1 个答案:

答案 0 :(得分:2)

像这样的字符串格式化并不需要首先转换为SQL并在数据库端执行。而只是查询数据库以获取所需信息,然后使用LINQ to对象在应用程序端执行字符串操作:

var query = db.Customer.Select(c => new
{
    c.ID,
    c.First_Name,
    c.Middle_Name,
    c.Last_Name,
})
.AsEnumerable()
.Select(c => new
{
    c.ID,
    FullNameLastFirstMiddle = 
        FormatName(c.First_Name, c.Middle_Name, c.Last_Name),
});