使用 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 的 ORM 是不是支持许多关联过滤?
如何在 Linq to SQL 中使用 NOEXPAND 提示?