是否在LINQ中使用AsEnumerable()?

巴东那

我知道AsEnumerable()是用来从“ LINQ to SQL”切换到“ LINQ to Object”的,所以我们可以在LINQ查询中使用一些额外的(主要是用户定义的)方法。但是从我的经验来看,使用AsEnumerable()会使查询变慢得多。在那种情况下,我可以稍后枚举列表以应用我自己的方法,但是结果仍然很慢。

任何人都可以提出更好的方法吗?

这是我要做什么的一些代码示例?

使用AsEnumerable():

var Data = (from r in _context.PRD_ChemProdReq.AsEnumerable()
                    //where r.RecordStatus == "NCF"
                    orderby r.RequisitionNo descending
                    select new PRDChemProdReq
                    {
                        RequisitionID = r.RequisitionID,
                        RequisitionNo = r.RequisitionNo,
                        RequisitionCategory = DalCommon.ReturnRequisitionCategory(r.RequisitionCategory),
                        RequisitionType = DalCommon.ReturnOrderType(r.RequisitionType),
                        ReqRaisedOn = (Convert.ToDateTime(r.ReqRaisedOn)).ToString("dd'/'MM'/'yyyy"),
                        RecordStatus= DalCommon.ReturnRecordStatus(r.RecordStatus),
                        RequisitionFromName = DalCommon.GetStoreName(r.RequisitionFrom),
                        RequisitionToName = DalCommon.GetStoreName(r.RequisitionTo)
                    }).ToList();

没有AsEnumerable():

var Data = (from r in _context.PRD_ChemProdReq
                    //where r.RecordStatus == "NCF"
                    orderby r.RequisitionNo descending
                    select new PRDChemProdReq
                    {
                        RequisitionID = r.RequisitionID,
                        RequisitionNo = r.RequisitionNo,
                        RequisitionCategory = r.RequisitionCategory,
                        RequisitionType = (r.RequisitionType),
                        ReqRaisedOnTemp = (r.ReqRaisedOn),
                        RecordStatus= (r.RecordStatus),
                        RequisitionFrom = (r.RequisitionFrom),
                        RequisitionTo = (r.RequisitionTo)
                    }).ToList();

        foreach (var item in Data)
        {
            item.RequisitionCategory = DalCommon.ReturnRequisitionCategory(item.RequisitionCategory);
            item.RequisitionType = DalCommon.ReturnOrderType(item.RequisitionType);
            item.ReqRaisedOn = (Convert.ToDateTime(item.ReqRaisedOnTemp)).ToString("dd'/'MM'/'yyyy");
            item.RecordStatus = DalCommon.ReturnRecordStatus(item.RecordStatus);
            item.RequisitionFromName = DalCommon.GetStoreName(item.RequisitionFrom);
            item.RequisitionToName = DalCommon.GetStoreName(item.RequisitionTo);
        }
巴东那

好的,大家注意到了我的不同观点,并提出了以下建议:

var Data = (from r in _context.PRD_ChemProdReq.AsEnumerable()
                    //where r.RecordStatus == "NCF"

                    join rf in _context.SYS_Store on (r.RequisitionFrom==null?0: r.RequisitionFrom) equals rf.StoreID into requisitionfrom
                    from rf in requisitionfrom.DefaultIfEmpty()

                    join rt in _context.SYS_Store on (r.RequisitionTo == null ? 0 : r.RequisitionTo) equals rt.StoreID into requisitionto
                    from rt in requisitionto.DefaultIfEmpty()

                    orderby r.RequisitionNo descending
                    select new PRDChemProdReq
                    {
                        RequisitionID = r.RequisitionID,
                        RequisitionNo = r.RequisitionNo,
                        RequisitionCategory = DalCommon.ReturnRequisitionCategory(r.RequisitionCategory),
                        RequisitionType = r.RequisitionType == "UR" ? "Urgent" : "Normal",
                        ReqRaisedOn = (Convert.ToDateTime(r.ReqRaisedOn)).ToString("dd'/'MM'/'yyyy"),
                        RecordStatus = (r.RecordStatus=="NCF"? "Not Confirmed": "Approved"),
                        RequisitionFromName = (rf==null? null: rf.StoreName),
                        RequisitionToName = (rt == null ? null : rt.StoreName)
                    });

首先,我删除了我的ToList(),它什么也不做,只是执行当我调用AsEnumerable()时已经完成的查询。没有要执行两次相同查询的点。另外,我在select块中的自定义方法调用在降低速度方面也起了很大的作用。我尝试减少方法调用,而是尽可能使用join。它使事情变得更快。谢谢你们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#.net中使用Linq表达式或AsEnumerable转换Foreach循环?

来自分类Dev

在查询中使用AsEnumerable()取值取匿名以查看模型的意义

来自分类Dev

是否可以在linq中使用反射到实体?

来自分类Dev

是否可以在linq中使用反射到实体?

来自分类Dev

Unity,如何使用AsEnumerable

来自分类Dev

在LINQ中使用包含

来自分类Dev

在LINQ中使用条件

来自分类Dev

在Wolfram中使用LINQ

来自分类Dev

在JArray中使用LINQ

来自分类Dev

在JArray中使用LINQ

来自分类Dev

在LINQ中使用条件

来自分类Dev

在LINQ中使用GroupBy

来自分类Dev

C#理解LINQ查询中的AsEnumerable

来自分类Dev

包含“ AsEnumerable()”对等项的Linq查询

来自分类Dev

在LINQ查询中使用“包含”时,检查List是否不为空,否则选择所有记录

来自分类Dev

在LINQ中使用时,是否在每次迭代中都重新计算一条语句?

来自分类Dev

LINQ2XML后代是否可以在Windows Phone 8中使用?

来自分类Dev

如何在C#中使用linq检查列表中是否存在两个值

来自分类Dev

linq查询中使用的字符串函数是否分解为查询表达式?

来自分类Dev

在EF Linq to Entities中使用动态linq

来自分类Dev

在LINQ查询中使用Func <>

来自分类Dev

在Linq to SQL中使用归类

来自分类Dev

在C#中使用linq

来自分类Dev

在LINQ中使用动态类型

来自分类Dev

在SelectMany LINQ中使用索引

来自分类Dev

在LINQ中使用求和方法

来自分类Dev

Linq:在GroupBy中使用变量

来自分类Dev

在视图中使用LINQ

来自分类Dev

在LINQ中使用等效的ASCII