2017-04-13 52 views
0

是否可以在lambda select语句中添加函数? 这是完全错误的语法,但它是为了演示目的。C#EF Lambda select with function

var test = _context.SomeDatabaseTable 
      .Select(c => new SomeViewModel 
      { 
       AssignedUsers = { 
        foreach (var item in c.AssignedToUserIDs.Split(';').ToList()) { 

         //SOME CODE 

        } 
       } 
      }); 

任何人知道是否有可能我必须循环结果后?

+0

为什么你不能简单地做外 – Sajeetharan

+1

据我所知,这是不可能在EF上作为代码不能转换为有效的SQL。 – HimBromBeere

+0

你可以用result.Foreach循环答案(r => doSomething); –

回答

2

你不能这样做的原因是因为Select()查询实际上并没有对数据库执行查询,所以EntityFramework试图将该C#代码转换为SQL,这显然不能。

在致电Select()之前,您可以致电ToList()执行查询。

var test = _context.SomeDatabaseTable 
        .ToList() 
        .Select(c => new SomeViewModel 
        { 
         AssignedUsers = c.AssignedToUserIDs.Split(';') 
        }); 

这有其自身的问题,不过,如果你还没有执行ToList()前过滤查询正确,你将开始跨越它获取作为你的数据库的规模日益恶化的性能问题来了。

你试图用那个foreach循环也是无效的。它甚至不应该编译,因此删除并使用我上面显示的内容,我假设AssignedUsers属性的类型为'List',如果要修改已拆分的单个元素,可以将另一个Select()方法链接到Split()