Linq no-noes - 捕获所有sql-like选择?

Moo*_*Moo 5 c# sql linq

作为初级开发人员,你曾经打败过的一件事是,你永远不会在数据集上做"SELECT*",因为它有几个原因是不可靠的.

自从转移到Linq(首先是Linq到SQL然后是实体框架),我想知道Linq等价物是否同样不受欢迎?

例如

var MyResult = from t in DataContext.MyEntity
               where t.Country == 7
               select t;
Run Code Online (Sandbox Code Playgroud)

我们应该选择只有我们想要明确提到的字段的匿名类型,还是LinqToSql等人现在可以接受的所有选择,因为它们提供的数据周围有额外的东西?

问候

Nic*_*ver 5

它并不令人沮丧,它取决于您的用例.如果要更新结果并保留它,那么您应该选择t,但是如果您不想这样做而只是查询显示目的,可以通过选择所需的属性来提高效率:

var MyResult = from t in DataContext.MyEntity
               where t.Country == 7
               select new { t.Prop1, t.Prop2 };
Run Code Online (Sandbox Code Playgroud)

这有几个原因.匿名类型的数量略快,但更重要的是它会禁用更改跟踪 ...因为您无法保留匿名类型,因此无需跟踪对其的更改.

这是这个常见性能领域的一个很好的概述,这在开始时非常棒.它包括对我刚刚描述的变化跟踪的更深入的解释.