我正在尝试使用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逻辑的字段的任何想法?
答案 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),
});