来自MSDN的样本linq查询:

var expensiveInStockProducts =
    from p in products
    where p.UnitsInStock > 0 && p.UnitPrice > 3.00M
    select p;


该查询是否立即从数据库表中选择每个列,还是返回某种按需重新分配实际列数据的指针?即。如果表中有50列,而我的实际代码中只使用了一个p.UnitsInStock,那么我检索的数据是否比预期多50倍?

最佳答案

如果您进行了调试,则可能会在查询的products部分看到SELECT ...表中的每一列

如果您做了select p.UnitsInStock,则只会在查询的SELECT ...部分中看到它。

因此,要回答您的问题,是的,除非您指定所需的内容,否则它将选择每列,或者将选择内容转储到匿名对象中,如下所示:

var expensiveInStockProducts =
    from p in products
    where p.UnitsInStock > 0 && p.UnitPrice > 3.00M
    select new { p.UnitsInStock, p.SomeOtherColumn }

09-06 05:26