var users = from u in db.UserProfiles select new UsersViewModel{
UserName = u.UserName,
UserId = u.UserId,
IsDisabled = u.IsDisabled,
Role = Roles.GetRolesForUser(u.UserName).FirstOrDefault()
};
我想从数据库中选择角色并创建一个 UsersViewModel
列表。但是, Entity Framework 试图在 SQL 端执行投影,其中没有与 Roles.GetRolesForUser 等效的方法。
有什么替代方法或者我应该如何在查询中执行任何方法?
最佳答案
最简单的方法是从 SQL 中获取所需数据,然后在查询执行后,遍历结果并从代码中的函数中填充其他详细信息。
例子:
var users = (from u in db.UserProfiles select new UsersViewModel{
UserName = u.UserName,
UserId = u.UserId,
IsDisabled = u.IsDisabled
}).ToList();
foreach(var user in users){
user.Role = Roles.GetRolesForUser(u.UserName).FirstOrDefault();
}
这里要记住的关键是将您正在做的事情分开(了解架构中关注点的分离)。首先处理 SQL,然后增加来自其他来源的数据,在您的例子中是角色提供者。
关于linq - 如何在 LINQ to Entities 中执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18087795/