这里表达式树限制的机制是什么?

Aar*_*ide 0 c# expression-trees

事实上我希望这个工作并没有让我找到我看不到的那张照片.

在此输入图像描述

Eri*_*ert 6

想象一下,查询被远程转移到数据库.数据库引擎应该如何通过互联网访问,因为它正在执行查询并告诉您计算机上的"count"变量自行更新?这样做没有标准的机制,因此任何会改变本地机器上的变量的东西都不能放入在远程机器上运行的表达式树中.

更一般地说,在执行时导致副作用的查询是非常非常糟糕的查询.永远不会在查询中产生副作用,即使在这样做是合法的情况下也是如此.这可能非常令人困惑.请记住,查询不是for循环.查询结果是对象表示查询,而不是查询的结果.执行时具有副作用的查询将在两次询问结果时执行这些副作用两次,并在要求结果零次时执行零次.第一部分变量变量的查询将在第二个子句执行之前改变该变量,而不是在执行第二个子句期间.因此,许多查询子句在依赖副作用执行时会给出完全奇怪的结果.

有关这方面的更多想法,请参阅Bill Wagner关于此主题的MSDN文章:

http://msdn.microsoft.com/en-us/vcsharp/hh264182

如果您正在编写LINQ-to-Objects查询,则可以通过压缩来执行您想要的操作:

var zipped = model.DirectTrackCampaigns.Top("10").Zip(Enumerable.Range(0, 10000), (first, second)=>new { first, second });

var res = zipped.Select(c=> new Campaign { IsSelected = c.second % 2 == 0, Name = c.first.CampaignName };
Run Code Online (Sandbox Code Playgroud)

也就是说,制作一系列数字和广告系列,然后操纵这些对.

你不知道怎么用LINQ做任何你正在使用的东西.

  • 你可以在没有调用Zip的情况下离开,因为[`Select`](http://msdn.microsoft.com/en-us/library/bb534869.aspx)方法会将索引传递给选择器功能. (2认同)
  • 我同意在尝试将它们发送到SQL Server时,带有赋值的表达式树会很糟糕.但表达树也适用于其他事物!为什么所有表达式树都受到语言限制,而不是Linq to SQL失败并且"赋值是非法的"异常? (2认同)