Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#EF Lambda选择功能_C#_Entity Framework_Lambda - Fatal编程技术网

C#EF Lambda选择功能

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

是否可以在lambda select语句中添加函数? 这是完全错误的语法,但只是为了演示

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(';')
                   });