从数据库中高效且正确的Linq查询

时间:2010-11-09 18:14:36

标签: c# asp.net linq

来自MSDN的示例linq查询:

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

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

2 个答案:

答案 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
          };