C#EF Lambda选择功能
是否可以在lambda select语句中添加函数? 这是完全错误的语法,但只是为了演示C#EF Lambda选择功能,c#,entity-framework,lambda,C#,Entity Framework,Lambda,是否可以在lambda select语句中添加函数? 这是完全错误的语法,但只是为了演示 var test = _context.SomeDatabaseTable .Select(c => new SomeViewModel { AssignedUsers = { foreach (var item in c.AssignedToUserIDs.Split(';').T
var test = _context.SomeDatabaseTable
.Select(c => new SomeViewModel
{
AssignedUsers = {
foreach (var item in c.AssignedToUserIDs.Split(';').ToList()) {
//SOME CODE
}
}
});
有人知道我是否有可能在之后循环结果吗?您不能这样做的原因是
Select()
查询实际上没有对数据库执行查询,因此EntityFramework尝试将该C代码转换为SQL,而它显然不能
在调用Select()
之前,可以通过调用ToList()
执行查询
不过,这也有其自身的问题,如果在执行ToList()
之前没有正确过滤查询,那么您将开始遇到性能问题,随着数据库大小的增加,性能问题会变得更糟
您尝试使用该
foreach
循环执行的操作也无效。它甚至不应该进行编译,这样就可以删除并使用我上面显示的内容,我假设AssignedUsers属性的类型为“List”,如果您想修改已拆分的单个元素,可以将另一个Select()
方法链接到split()
的末尾,您不能这样做的原因是Select()
query实际上不会对数据库执行查询,因此EntityFramework会尝试将该C代码转换为SQL,但显然不能
在调用Select()
之前,可以通过调用ToList()
执行查询
不过,这也有其自身的问题,如果在执行ToList()
之前没有正确过滤查询,那么您将开始遇到性能问题,随着数据库大小的增加,性能问题会变得更糟
您尝试使用该
foreach
循环执行的操作也无效。它甚至不应该进行编译,这样就可以删除它,并使用我上面显示的内容,我假设AssignedUsers属性的类型为“List”,如果您想修改已拆分的单个元素,可以将另一个Select()
方法链接到split()的末尾
就我所知,为什么你不能简单地做一些事情呢?这在EF上是不可能的,因为代码不能转换成有效的SQL。你可以在事后用结果循环答案。Foreach(r=>doSomething);你试图一次做太多的事情。记住,EF是一个ORM——它加载数据。如果您尝试将其用于其他用途,最多只能获得糟糕的性能。混合使用数据访问和视图模型不是一个好主意。创建ViewModels是为了在模型和视图之间添加另一层分隔,而不是用作DTO。编写一个加载所需数据的查询,然后将该数据映射到ViewModels。另一个坏主意是将ID存储为CSV字符串,而不是在EF模型和数据库中使用正确的关系。这是根本不可能修复的,因为bug一直延伸到现场。而是创建一个多对多关系,并让EF处理它。这就是它的工作。就我所知,为什么你不能简单地做一些事情呢?这在EF上是不可能的,因为代码不能转换成有效的SQL。你可以在之后用一个结果来循环答案。Foreach(r=>doSomething);你试图一次做太多的事情。记住,EF是一个ORM——它加载数据。如果您尝试将其用于其他用途,最多只能获得糟糕的性能。混合使用数据访问和视图模型不是一个好主意。创建ViewModels是为了在模型和视图之间添加另一层分隔,而不是用作DTO。编写一个加载所需数据的查询,然后将该数据映射到ViewModels。另一个坏主意是将ID存储为CSV字符串,而不是在EF模型和数据库中使用正确的关系。这是根本不可能修复的,因为bug一直延伸到现场。而是创建一个多对多关系,并让EF处理它。这就是它的工作
var test = _context.SomeDatabaseTable
.ToList()
.Select(c => new SomeViewModel
{
AssignedUsers = c.AssignedToUserIDs.Split(';')
});