[英]How to get some columns of entity in entity-framework?
假设我有一个超过1000000列的表。 当我使用LINQ To SQL
和Entity-Framework
所有查询都将在c#中编写,如下所示:
EFContext.MyTableName.Where(row=>row.column1==someValue)
.Select(...)
.FirstOrDefault(...)
.Any(...)
...
如何只获得实体的一些列? 有没有办法只获得1000000列中的第1列和第2列和第3列?
注意:
结果数据的类型应该在选择后保留,例如,如果没有过滤某些列类型的结果是Type1,那么非常重要的是,在过滤之后,结果的类型是Type1,但是过滤的Type1的那些属性的值应该是null或default。
要获得一些ROWS,您可以使用:
.Take(3);
要只获得一些列,您可以使用:
.Select(x => new MyType() { Column1 = x.Column1, Column2 = x.Column2 })
请注意,该对象现在未附加到objectcontext,因此它不会受到SaveChanges()的影响。 但是你只会选择几列,类型仍然是正确的。
要获取自己的默认值而不是变量类型的框架默认值,可以修改构造函数类型以设置默认值。
我知道你在Entity Framework中获得列的一个子集的唯一方法是创建一个新的实体类,它只有你感兴趣的列并将它映射到同一个表。 在查询该实体时,EF将不会选择这些列。 您还可以在需要时继续使用完整实体 - 没有任何内容表示您不能将两个实体类映射到同一个表。 或者三个。 或者四个......
根据数据库定义,子集实体可能完全不足以插入或更新行而不违反约束,但它可以是一个非常有用的工具,可以减少您对选择所做的不必要的数据传输量,以及实现具有许多不需要的列的实体的时间损失(这可能非常重要)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.