在使用LINQ to SQL时,如何指定/过滤应填充哪些表列?

时间:2012-02-17 12:22:01

标签: c# asp.net entity-framework linq-to-sql orm

我正在使用LINQ to SQL并且有一个名为Product with 20 columns的数据库表。 Product表映射到LINQ to SQL元数据中的Product类。

我想使用我的dbContext并检索一些产品记录,但只填充10列而不是所有20列。

如何指定哪些列应该使用LINQ to SQL(或EF)返回/填充?

我知道一种方法是使用存储过程,但问题就在于此。

谢谢,

1 个答案:

答案 0 :(得分:4)

您通常使用匿名类:

db.Products.Where(... filter ...).Select(item => new 
{
   Field1 = item.Field1,
   Field2 = item.Field2,
});

仅选择您包含的字段。如果您打算将此数据结构传递给其他函数或返回它,则需要子字段集的具体类定义,例如:

class SmallerEntity
{
    public something Field1;
    public something Field2;
}

您可以在Select语句中初始化它:

db.Products.Where(... filter ...).Select(item => new SmallerEntity
{
   Field1 = item.Field1,
   Field2 = item.Field2,
});

我不推荐半填充现有类的做法。这会使您的状态空间变得不必要地复杂,并允许您的代码中出现更多错误。尝试在自己的类中包含较小的数据子集。