来自MSDN的示例linq查询:
var expensiveInStockProducts =
from p in products
where p.UnitsInStock > 0 && p.UnitPrice > 3.00M
select p;
此查询是立即从数据库表中选择每一列,还是返回某种指针按需查看实际列数据?即。如果我的表中有50列,并且我在实际代码中只使用了一个p.UnitsInStock,那么我检索的数据是否比预期的多50倍?
答案 0 :(得分:3)
如果你调试了那么你可能会在查询的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 }
答案 1 :(得分:1)
如果你想看到生成的SQL它确实有助于可视化,我会建议使用LINQPad,只是为了帮助你想要的东西(如果你只需要本地数据)使用匿名对象或选择一个具体的类在您的应用程序模型中,
所以
匿名
var expensiveInStockProducts =
from p in products
where p.UnitsInStock > 0 && p.UnitPrice > 3.00M
select new {
p.ColumnIWant1,
p.ColumnIWant2
};
或具体类
var expensiveInStockProducts =
from p in products
where p.UnitsInStock > 0 && p.UnitPrice > 3.00M
select new MyClass() {
ColumnIWantAsField1 = p.ColumnIWant1,
ColumnIWantAsField2 = p.ColumnIWant2
};