Я понимаю, что AsEnumerable()
используется для переключения с «LINQ to SQL» на «LINQ to Object», поэтому мы можем использовать некоторые дополнительные (в основном пользовательские) методы в наших запросах LINQ. Но из моего опыта, который я видел, использование AsEnumerable()
делает запрос намного медленнее. В этом случае я могу перечислить список позже, чтобы применить свои собственные методы, но результат довольно медленный.Использовать ли ASEnumerable() в LINQ или нет?
Может ли кто-нибудь предложить лучший подход?
Вот пример кода того, что я пытаюсь сделать?
С 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 проблема. Ваша настоящая проблема возникает из-за того, что вы смешиваете логику отображения с логикой доступа к данным. – Aron
Не так много различий между двумя фрагментами кода, вы неизменно приносите данные в память один раз с помощью AsEnumerable, затем ToList(), а в другом случае с помощью ToList(). Вы можете найти разницу только при использовании IEnumerable и IQueryable отдельно. IQueryable поможет выполнить запрос через поставщика данных. –