加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 集中或合并LINQ select

发布时间:2020-12-15 08:46:11 所属栏目:百科 来源:网络整理
导读:如何重构此代码以便我可以集中投影? public IEnumerableItemDto GetItemsByType(int itemId,ItemType itemType){ IEnumerableItemDto items = null; try { var tempItems= _Items.Get(i = i.ItemId == itemId o.Active == true); switch (itemType) { case
如何重构此代码以便我可以集中投影?
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 { ... }
}

基本上,我在每个案例陈述中都有很多案例陈述和长期预测.我担心一旦DTO需要改变,比如添加一个新字段,其他情况的投影可能彼此不一致(忘记或错过更新).我该如何集中这个?

解决方法

你能这样接近吗?
var query = tempItems.AsQueryable();

switch(itemType)
{
   case ItemType.Damaged:
        query.Join(...);
        break;

   case ItemType.Fixed:
        query.Where(...);
}

query.Select(e => new ItemDto{//Lots of properties});

return query.ToList();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读