LINQ查询自定义EF 6.1中的对象最佳实践

时间:2016-04-21 11:01:59

标签: c# performance entity-framework linq

我在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();

这两个查询都运行正常。但我的问题是使用哪一个?哪个是最佳的性能?

1 个答案:

答案 0 :(得分:4)

[根据我对OP的评论]

我认为,由于涉及的指标太多,因此性能是如此难以确定的主题。对于上面的简单查询,显而易见的答案是使用EF约定,因为您可以免费获得intellisense,并且使测试变得轻而易举。

根据sql查询的静态字符串会随着时间的推移而中断(坏,坏,坏!!)并且查询的主体也会随着时间的推移而变化(更糟糕,更糟糕,更糟),所以你有一个移动目标可选我 - 去除ii,除非你有可衡量的问题。

另外,性能不仅仅与速度(imho)有关,还与目的清晰度和易维护性有关。在苏格兰有一句古老的谚语更加急速,速度更慢。简而言之,要平衡从查询中删除几毫秒与使工作代码出门并轻松维护的含义。你的团队会感谢你(随着时间的推移你自己)