给出以下查询:
var query = from item in context.Users // Users if of type TblUser
select new User() // User is the domain class model
{
ID = item.Username,
Username = item.Username
};
如何在其他查询中重用语句的select部分?即。
var query = from item in context.Jobs // Jobs if of type TblJob
select new Job() // Job is the domain class model
{
ID = item.JobId,
User = ReuseAboveSelectStatement(item.User);
};
我尝试使用mapper方法:
public User MapUser(TblUser item)
{
return item == null ? null : new User()
{
ID = item.UserId,
Username = item.Username
};
}
使用:
var query = from item in context.Users // Users if of type TblUser
select MapUser(item);
但是如果我这样做,那么框架会抛出一个错误,例如:
LINQ to Entities无法识别 方法'MapUser(TblUser)'方法, 而这种方法无法翻译 进入商店表达。
答案 0 :(得分:1)
您不能在类似的查询定义中使用常规函数调用。 LINQ需要表达式树,它无法分析已编译的函数并将其神奇地转换为SQL。 Read this for a more elaborate explanation
引用文章中使用的技术已合并到linqkit(分解谓词)并可能有所帮助,但我不确定您是否可以使用相同的技术来管理投影,这就是您的看法想要。
你应该问自己这个更基本的问题恕我直言,你是否真的需要这个额外的映射层?看起来你正在实施EF已经完全能够为你做的事情......
答案 1 :(得分:0)
尝试制作MapUser
方法static
。