我正在使用EF5 Code First型号。请考虑以下实体框架查询:
var results = from i in context.Table1
where i.ID == Id // passed in
select new TableInfo()
{
Name = i.Name,
ActionDate = i.Action.ActionDate,
CreatedDate = i.Action.CreatedDate,
CreatedBy = i.Action.CreatedBy.FullName
};
FullName属性因此被定义:
[NotMapped]
[Display(Name = "Full Name")]
public string FullName
{
get
{
string ret = string.Empty;
if (String.IsNullOrEmpty(LAST_NAME) || String.IsNullOrEmpty(FIRST_NAME))
{
return "";
}
else
{
return string.Format("{0}, {1}", LAST_NAME, FIRST_NAME);
}
}
}
我收到错误:
LINQ to Entities不支持指定的类型成员'FullName'。仅支持初始化程序,实体成员和实体导航属性。
如果我创建一个扩展方法来执行相同的操作,我会收到类似的错误。所以问题是如何让EF不要试图在数据存储上运行这些东西?
答案 0 :(得分:2)
问题是select子句的初始值设定项中的表达式:
CreatedBy = i.Action.CreatedBy.FullName
这导致Linq-to-Entity提供程序尝试查找名为“FullName”的属性的映射。如果您尝试使用扩展方法,则同样适用。
你可以这样做:
var results =
from i in context.Table1
where i.ID == Id // passed in
select new TableInfo()
{
Name = i.Name,
ActionDate = i.Action.ActionDate,
CreatedDate = i.Action.CreatedDate,
CreatedBy = i.Action.CreatedBy
};
然后使用item.CreatedBy.FullName
通过自定义属性访问该名称