LINQ를 통해 두 개의 목록이 반환됩니다. 내 목표는 '기본값'목록에서 'notDefaults'목록에있는 항목을 제외한 모든 항목을 반환하는 것입니다.linq을 사용하여 항목 제외
현재 두 개의 중첩 된 for 루프와 'RemoveAt'를 통해이 작업을 수행하고 있습니다. 이 작업은 단 하나의 LINQ 문으로 수행 할 수 있습니까? 기본적으로 'AssetPayrollMarkupOverrides'테이블에 항목이 없으면 '기본값'목록에 모든 항목이 필요합니다.
나는 it appears to be slow부터 'RemoveAt'를 사용하는 것에 대해 우려하고 있습니다.
var defaults = (from a in dbcontext.Assets
join b in dbcontext.AssetAddresses on a.AssetID equals b.AssetID
join c in dbcontext.Addresses on b.AddressID equals c.AddressID
join d in dbcontext.StateLookups on c.StateID equals d.StateID
where d.ShortName == state
select new AssetMarkup()
{
AssetId = a.AssetID,
AssetName = a.AssetName,
Seg1_Code = a.Seg1_Code,
ShortName = d.ShortName,
OfficePercentage = dbcontext.PayrollMarkups.Where(x => x.StateID == c.StateID).Select(x => x.OfficePercentage).FirstOrDefault(),
MaintenancePercentage = dbcontext.PayrollMarkups.Where(x => x.StateID == c.StateID).Select(x => x.MaintenancePercentage).FirstOrDefault(),
Note = dbcontext.AssetPayrollMarkupOverrides.Where(x => x.AssetID == a.AssetID).Select(x => x.Note).FirstOrDefault()
}).ToList();
var notDefaults = (from a in dbcontext.Assets
join b in dbcontext.AssetAddresses on a.AssetID equals b.AssetID
join c in dbcontext.Addresses on b.AddressID equals c.AddressID
join d in dbcontext.StateLookups on c.StateID equals d.StateID
join e in dbcontext.AssetPayrollMarkupOverrides on a.AssetID equals e.AssetID
where d.ShortName == state
select new AssetMarkup()
{
AssetId = a.AssetID,
AssetName = a.AssetName,
Seg1_Code = a.Seg1_Code,
ShortName = d.ShortName,
OfficePercentage = dbcontext.PayrollMarkups.Where(x => x.StateID == c.StateID).Select(x => x.OfficePercentage).FirstOrDefault(),
MaintenancePercentage = dbcontext.PayrollMarkups.Where(x => x.StateID == c.StateID).Select(x => x.MaintenancePercentage).FirstOrDefault(),
Note = dbcontext.AssetPayrollMarkupOverrides.Where(x => x.AssetID == a.AssetID).Select(x => x.Note).FirstOrDefault()
}).ToList();
return Json(defaults.Except(notDefaults).OrderBy(x => x.AssetName).ToDataSourceResult(request));
원래 게시글에이 사실을 밝히지 않았지만 '예외'를 사용하려고했지만 그 기능이 작동하지 않는 것으로 사과합니다. 필자는 동일한 OfficePercentage, MaintenancePercentage 및 Notes를 각 linq 문에 추가하여 정확히 일치하는지 확인하고 'Except'가 여전히 작동하지 않는 것처럼 보였습니다. return Json (defaults.Except (notDefaults) .OrderBy (x => x.AssetName) .ToDataSourceResult (request)); – Mithrilhall
AssetMarkup 개체를 적절하게 비교하는 방법으로 Equals 오버로드가 발생해야합니다. –