【发布时间】:2015-09-16 17:32:15
【问题描述】:
我了解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);
}
【问题讨论】:
-
XY 问题。您真正的问题在于您将显示逻辑与数据访问逻辑混合在一起。
-
两个代码 sn-ps 之间没有太大区别,您总是将数据带入内存,一次使用 AsEnumerable,然后使用 ToList(),在其他情况下使用 ToList()。只有单独使用 IEnumerable 和 IQueryable 才能发现区别。 IQueryable 将帮助通过数据提供者执行查询
标签: c# linq linq-to-sql entity-framework-5 linq-to-objects