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

Posted

技术标签:

【中文标题】使用 LINQ to SQL 时如何指定/过滤应填充哪些表列?【英文标题】:How to specify/filter which table columns should be populated when working with LINQ to SQL? 【发布时间】:2012-02-17 12:22:00 【问题描述】:

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

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

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

我知道一种方法是使用存储过程,但这就是这个问题的意义所在。

谢谢,

【问题讨论】:

【参考方案1】:

您通常为此使用匿名类:

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,
);

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

【讨论】:

您可以这样做,但是您应该知道您失去了将更改提交回数据库的可能性。所以只要它是只读的,这个解决方案就可以了。

以上是关于使用 LINQ to SQL 时如何指定/过滤应填充哪些表列?的主要内容,如果未能解决你的问题,请参考以下文章

Linq To Sql 左外连接 - 过滤空结果

LINQ to SQL 或任何其他启用了 LINQ 的 ORM 是不是支持许多关联过滤?

如何在 Linq to SQL 中使用 NOEXPAND 提示?

具有 Lightswitch 计算属性的 Linq to SQL 查询过滤器

LINQ to SQL语句之Where

Linq To NHibernate Plus sql 用户定义函数