0
괜찮 았던 linq 쿼리가 있지만 프로젝트에서 StyleCop을 실행하면 다음 오류가 생성됩니다. "CA1505 : Microsoft.Maintainability : 다시 쓰기 또는 리팩터링 유지 보수 지수 (MI)를 높이기위한 유형의 방법 "이라고 설명했다. 나는 쿼리의 일부를 제거하고 그 오류를 수정 발견했다. 문제는 쿼리가 너무 길어서 CA1505 오류를 없애기 위해 쿼리를 줄이는 방법을 찾고 있습니다. 여기에서의 문제는 데이터가 5 개의 주 테이블에 상주한다는 것인데, 이에 상응하는 SQL은 기본적으로 5 개의 모든 UNION 문입니다. 어떤 제안?linq 쿼리를 수행하면 "CA1505 : Microsoft.Maintainability"오류가 발생합니다.
public List<ExpiringItemModel> GetByDaysToExpire(int days)
{
var int1 = days - 30;
var int2 = days - 16;
var int3 = days - 0;
var query = (
from outlet in _modelContext.Outlets
join outletcommunicationmethod in _modelContext.OutletCommunicationMethods on
new { Id = outlet.Id }
equals new { Id = outletcommunicationmethod.OutletId }
join outletcarpermitagent in _modelContext.outletcarpermitagents on
new { Id = outlet.Id } equals
new { Id = outletcarpermitagent.OutletId }
join outlettype in _modelContext.OutletTypes on
new { OutletTypeId = outletcarpermitagent.OutletTypeId } equals
new { OutletTypeId = outlettype.Id }
where
(outletcommunicationmethod.CommunicationMethodId == 1
&&
SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcarpermitagent.BondExpirationDate) > 0) &&
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcarpermitagent.BondExpirationDate) == days ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcarpermitagent.BondExpirationDate) == 30) ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcarpermitagent.BondExpirationDate) == 14))
select new ExpiringItemModel
{
Id = (Int32)outletcarpermitagent.Id,
AgentType = outlettype.Value,
Email = outletcommunicationmethod.Value,
BondExpirationDate = (DateTime)outletcarpermitagent.BondExpirationDate
}
).Concat
(
from outlet_1 in _modelContext.Outlets
join outletcommunicationmethod_1 in _modelContext.OutletCommunicationMethods on
new { Id = outlet_1.Id } equals new { Id = outletcommunicationmethod_1.OutletId }
join outlettruckpermitagent in _modelContext.outlettruckpermitagents on
new { Id = outlet_1.Id } equals new { Id = outlettruckpermitagent.OutletId }
join outlettype_1 in _modelContext.OutletTypes on
new { OutletTypeId = outlettruckpermitagent.OutletTypeId } equals
new { OutletTypeId = outlettype_1.Id }
where
(outletcommunicationmethod_1.CommunicationMethodId == 1
&&
SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outlettruckpermitagent.BondExpirationDate) > 0) &&
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outlettruckpermitagent.BondExpirationDate) == days ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outlettruckpermitagent.BondExpirationDate) == 30) ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outlettruckpermitagent.BondExpirationDate) == 14))
select new ExpiringItemModel
{
Id = (Int32)outlettruckpermitagent.Id,
AgentType = outlettype_1.Value,
Email = outletcommunicationmethod_1.Value,
BondExpirationDate = (DateTime)outlettruckpermitagent.BondExpirationDate
}
).Concat
(
from outlet_2 in _modelContext.Outlets
join outletcommunicationmethod_2 in _modelContext.OutletCommunicationMethods on
new { Id = outlet_2.Id } equals new { Id = outletcommunicationmethod_2.OutletId }
join outletcyclepermitagent in _modelContext.outletcyclepermitagents on new { Id = outlet_2.Id } equals
new { Id = outletcyclepermitagent.OutletId }
join outlettype_2 in _modelContext.OutletTypes on new { OutletTypeId = outletcyclepermitagent.OutletTypeId }
equals new { OutletTypeId = outlettype_2.Id }
where
(outletcommunicationmethod_2.CommunicationMethodId == 1
&&
SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcyclepermitagent.BondExpirationDate) > 0) &&
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcyclepermitagent.BondExpirationDate) == days ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcyclepermitagent.BondExpirationDate) == 30) ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletcyclepermitagent.BondExpirationDate) == 14))
select new ExpiringItemModel
{
Id = (Int32)outletcyclepermitagent.Id,
AgentType = outlettype_2.Value,
Email = outletcommunicationmethod_2.Value,
BondExpirationDate = (DateTime)outletcyclepermitagent.BondExpirationDate
}
).Concat
(
from outlet_3 in _modelContext.Outlets
join outletcommunicationmethod_3 in _modelContext.OutletCommunicationMethods on
new { Id = outlet_3.Id } equals new { Id = outletcommunicationmethod_3.OutletId }
join outletscooteragent in _modelContext.outletscooteragentAgents on
new { Id = outlet_3.Id } equals
new { Id = outletscooteragent.OutletId }
join outlettype_3 in _modelContext.OutletTypes on
new { OutletTypeId = outletscooteragent.OutletTypeId }
equals new { OutletTypeId = outlettype_3.Id }
where
(outletcommunicationmethod_3.CommunicationMethodId == 1
&&
SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletscooteragent.BondExpirationDate) > 0) &&
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletscooteragent.BondExpirationDate) == days ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletscooteragent.BondExpirationDate) == 30) ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletscooteragent.BondExpirationDate) == 14))
select new ExpiringItemModel
{
Id = (Int32)outletscooteragent.Id,
AgentType = outlettype_3.Value,
Email = outletcommunicationmethod_3.Value,
BondExpirationDate = (DateTime)outletscooteragent.BondExpirationDate
}
).Concat
(
from outlet_4 in _modelContext.Outlets
join outletcommunicationmethod_4 in _modelContext.OutletCommunicationMethods on
new { Id = outlet_4.Id } equals new { Id = outletcommunicationmethod_4.OutletId }
join outletoffroadagent in _modelContext.outletoffroadagentAgents on new { Id = outlet_4.Id } equals
new { Id = outletoffroadagent.OutletId }
join outlettype_4 in _modelContext.OutletTypes on new { OutletTypeId = outletoffroadagent.OutletTypeId }
equals new { OutletTypeId = outlettype_4.Id }
where
(outletcommunicationmethod_4.CommunicationMethodId == 1
&&
SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletoffroadagent.BondExpirationDate) > 0) &&
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletoffroadagent.BondExpirationDate) == days ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletoffroadagent.BondExpirationDate) == 30) ||
(SqlFunctions.DateDiff("day", SqlFunctions.GetDate(),
outletoffroadagent.BondExpirationDate) == 14))
select new ExpiringItemModel
{
Id = (Int32)outletoffroadagent.Id,
AgentType = outlettype_4.Value,
Email = outletcommunicationmethod_4.Value,
BondExpirationDate = (DateTime)outletoffroadagent.BondExpirationDate
}
);
return query.ToList();
}