如何在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不会选择这些列。 您还可以在需要时继续使用完整实体 – 没有任何内容表明您不能将两个实体类映射到同一个表。 或者三个。 或者四个……

根据数据库定义,子集实体可能完全不足以插入或更新行而不违反约束,但它可以是一个非常有用的工具,可以减少您对选择所做的不必要的数据传输量,以及实现具有许多不需要的列的实体的时间损失(这可能非常重要)。