您好我尝试在实体选择查询中调用存储过程。但我得到了错误。 首先,我检查一下外面的程序。
var img = dc.get_User_Image(1).FirstOrDefault();
var Task = from tbl_Task tsk in dc.tbl_Task
join tmp in dc.tbl_TaskAssignment
on tsk.TaskID equals tmp.TaskID into jointable
from tmp in jointable.DefaultIfEmpty()
join ct in dc.tbl_User on tmp.AssignTo equals ct.UserID
where tsk.IsDeleted == false && tsk.TaskID == IntTaskID &&
tmp.IsDeleted == false
select new
{
TaskID = tsk.TaskID,
TaskDesc = tsk.Remarks,
TaskTitle = tsk.TaskTitle,
TaskEmpName = tmp.tbl_User.tbl_Contact.FirstName_EN,
TaskEmpID = tmp.AssignTo,
profileImage = "",
Priority = tsk.Priority,
TaskCompletedPercentage = tmp.CompletedPercentage
};
没有错误。得到了结果。但是将代码更改为:
var Task = from tbl_Task tsk in dc.tbl_Task
join tmp in dc.tbl_TaskAssignment on tsk.TaskID equals tmp.TaskID into jointable
from tmp in jointable.DefaultIfEmpty()
join ct in dc.tbl_User on tmp.AssignTo equals ct.UserID
where tsk.IsDeleted == false && tsk.TaskID == IntTaskID &&
tmp.IsDeleted == false
select new
{
TaskID = tsk.TaskID,
TaskDesc = tsk.Remarks,
TaskTitle = tsk.TaskTitle,
TaskEmpName = tmp.tbl_User.tbl_Contact.FirstName_EN,
TaskEmpID = tmp.AssignTo,
profileImage = dc.get_User_Image(tmp.AssignTo).FirstOrDefault(),
Priority = tsk.Priority,
TaskCompletedPercentage = tmp.CompletedPercentage
};
收到错误
LINQ to Entities无法识别该方法 ' {System.Data.Objects.ObjectResult {1}} 1 [System.Int64])'方法,这个 方法无法转换为商店表达式。
" dc.get_User_Image"接受"用户ID" (Int)并返回图像路径(String)。 在第一个代码我检查功能,单独。它工作正常。 在选择Query iam中调用this-> " profileImage = dc.get_User_Image(tmp.AssignTo).FirstOrDefault()"。它抛出错误
我无法理解为什么? 请帮助。
答案 0 :(得分:2)
dc.get_User_Image(tmp.AssignTo)
是一个实际的CLR方法,它包装对数据库中存储过程的访问;它本身并不是一个实际的存储过程。
实体框架无法将对任意方法的调用转换为SQL,因此错误消息。您需要实现查询(例如ToList()
)和然后在其上运行转换函数(Select new {...}
),以便该函数可用。
答案 1 :(得分:1)
var Task = (from tbl_Task tsk in dc.tbl_Task
join tmp in dc.tbl_TaskAssignment on tsk.TaskID equals tmp.TaskID into jointable
from tmp in jointable.DefaultIfEmpty()
join ct in dc.tbl_User on tmp.AssignTo equals ct.UserID
where tsk.IsDeleted == false && tsk.TaskID == IntTaskID &&
tmp.IsDeleted == false
select new
{
TaskID = tsk.TaskID,
TaskDesc = tsk.Remarks,
TaskTitle = tsk.TaskTitle,
TaskEmpName = tmp.tbl_User.tbl_Contact.FirstName_EN,
TaskEmpID = tmp.AssignTo,
Priority = tsk.Priority,
TaskCompletedPercentage = tmp.CompletedPercentage
}).AsEnumerable().select(row=> new {
task = row,
profileImage = dc.get_User_Image(tmp.AssignTo).FirstOrDefault()
})