linq - 如何在 LINQ to Entities 中执行方法

标签 linq linq-to-entities entity-framework-5

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/

相关文章:

c# - 如何编写具有来自一列的多个值的 LINQ 查询?

c# - 使用 Linq 和分组依据将数据表转换为对象

c# - Linq to Entity Paging With Large dataset 太慢

sql-server - 如何解决与 Entity Framework 的排序规则冲突?

c# - 使用空间类型和自动映射器时如何优化 Entity Framework 查询?

c# - 在 .Where() 中使用 .SingleOrDefault() 将引发以下异常 :- System. NotSupportedException 未被用户代码处理

c# - 我想知道在迭代数据读取器对象时连接状态和 'yield' 对代码性能的影响

.net - 使用与声明上下文变量相比有优势吗?

c# - Entity Framework 子查询

entity-framework - Enable-Migrations 安装错误