Bu kodu nasıl yansıtabilirim, böylece projeksiyonu merkezileştirebilirim?LINQ'ı merkezileştirme veya konsolide etme
public IEnumerable<ItemDto> GetItemsByType(int itemId, ItemType itemType)
{
IEnumerable<ItemDto> items = null;
try
{
var tempItems= _Items.Get(i => i.ItemId == itemId
&& o.Active == true);
switch (itemType)
{
case ItemType.Normal:
items = from item in tempItems
select new ItemDto
{
// many fields here
};
break;
case ItemType.Damaged:
items = from item in tempItems
join itemDetail in _ItemDetails.Get() on item.ID equals itemDetail.ItemID
select new ItemDto
{
// many fields here
};
break;
case ItemType.Fixed:
items = from item in tempItems
join itemDetail in _ItemDetails.Get() on item.ID equals itemDetail.ItemID
where item.Status.ToLower() == "fixed"
select new ItemDto
{
// many fields here
};
break;
// more case statements here...
default:
break;
}
}
catch { ... }
}
Temel olarak, her bir vaka bildirimi için çok fazla vaka bildirimi ve uzun bir projeksiyon var. DTO'nun değişmesi gerektiğinde, yeni bir alan ekledikten sonra, diğer vakaların projeksiyonlarının birbiriyle tutarlı olmayabileceğinden endişeleniyorum (güncellemeyi unuttum veya kaçırdınız). Bunu nasıl merkezleyebilirim?
var baseQuery = from item in tempItems select item;
switch (itemType)
{
case ItemType.Fixed:
baseQuery = from item in baseQuery where item.ID equals itemID select item;
break;
}
return (from item in baseQuery select new ItemDTO (...projection here...));
Buradaki birçok // alanın hepsi aynı kod mu? – Enigmativity
Evet, aynı kod –
kodları. Sonra cevabım faydalı olabilir. – Enigmativity