我在Visual Studio 2013中使用EF 6.1。我有一个View Model
public class SaprePartsViewModel
{
public long ItemID { get; set; }
public string ItemCode { get; set; }
public string ItemName { get; set; }
}
并且还有具有相同列名的数据库表SapreParts
。
我已经完成了这两个方法来获取自定义对象
岛
var sqlQueryList = db.Database.SqlQuery<SaprePartsViewModel>(
"select ItemID,ItemCode,ItemName from SpareParts").ToList();
II。
var linqQueryList = db.SpareParts.Select(x => new SaprePartsViewModel
{
ItemID = x.ItemID,
ItemCode = x.ItemCode,
ItemName = x.ItemName
}).ToList();
这两个查询都运行正常。但我的问题是使用哪一个?哪个是最佳的性能?
答案 0 :(得分:4)
[根据我对OP的评论]
我认为,由于涉及的指标太多,因此性能是如此难以确定的主题。对于上面的简单查询,显而易见的答案是使用EF约定,因为您可以免费获得intellisense,并且使测试变得轻而易举。
根据sql查询的静态字符串会随着时间的推移而中断(坏,坏,坏!!)并且查询的主体也会随着时间的推移而变化(更糟糕,更糟糕,更糟),所以你有一个移动目标可选我 - 去除ii,除非你有可衡量的问题。
另外,性能不仅仅与速度(imho)有关,还与目的清晰度和易维护性有关。在苏格兰有一句古老的谚语更加急速,速度更慢。简而言之,要平衡从查询中删除几毫秒与使工作代码出门并轻松维护的含义。你的团队会感谢你(随着时间的推移你自己)