public class RequestSell
{
public string name { get; set; }
public string region { get; set; }
}
var model = context.RequestSellctx
.Select(x => new RequestSellDto { ConsoleName = x.Name })
.ToList();
和
var model = context.RequestSellctx.Select(x => Map(x)).ToList();
private RequestSellDto Map(RequestSell x) =>
new RequestSellDto {
ConsoleName = x.Name
};
因为当我执行时,在T-SQL中,第一个示例只加载表的特定列,但第二个代码片段加载表中的所有列。
答案 0 :(得分:2)
根本区别在于Select
方法中的表达式。
在第一种情况下,您只使用name
属性,因此实体框架知道它可以优化查询以仅读取该列。请注意,从x
变量中,您只能命名name
属性。请注意,RequestSell
永远不会真正创建。
第二个片段将变量直接传递给方法以进行进一步处理。实体框架不知道该方法将做什么,因此它假设最坏并构建完整对象,然后调用Map
方法并返回它返回的任何内容。
重要的区别在于,在一种情况下,直接使用select表达式,在其他情况下,它传递给外部代码,有效地完成客户端的所有工作,而第一种情况委托工作到服务器。