繁体   English   中英

如何在实体框架中获取一些实体列?

[英]How to get some columns of entity in entity-framework?

假设我有一个超过1000000列的表。 当我使用LINQ To SQLEntity-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM