代码之家  ›  专栏  ›  技术社区  ›  zeroflaw

这是使用LINQ查询语法分配属性的较短方法吗?

  •  0
  • zeroflaw  · 技术社区  · 6 年前

    Items )

    如果我使用LINQ查询语法 Join Store ),看来不可避免的是,我不得不重新分配的每一个财产从 Item ,对吧?

        var temp = from a in items
                   join b in stores on a.storeKey = b.storeKey into b2
                   from c in b2.DefaultIfEmpty()
                   select new ItemViewModel()
                   {
                      p1 = a.p1,
                      p2 = a.p2,
                      ....
                      p30 = a.p2, //re-assign 30 times (T.T)
    
                      storeInfo1 = c.storeInfo1 //all i want is 1 or 2 additional info from store
                   }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Peter B    6 年前

    AutoMapper . 之间相同的属性名称 a ItemViewModel 它可以使用反射为您进行映射,对于具有不同名称的属性,您可以定义手动映射,对于来自其他对象(b和c)的属性,您可以使用辅助对象。

    像这样:

    var temp = from a in items
               join b in stores on a.storeKey = b.storeKey into b2
               from c in b2.DefaultIfEmpty()
               select CreateModelFrom(a, b, c);
    
    public ItemViewModel CreateModelFrom(ObjA a, ObjB b, ObjC c)
    {
        var model = Mapper.Map<ObjA, ItemViewModel>();
        model.xxx = b.xxx;
        model.storeInfo1 = c.storeInfo1;
        return model;
    }
    
        2
  •  0
  •   ManishM    6 年前

    1. 它应该是里面的财产

    我在用第二种方式写作

    class Item
    {
         string p1;
         ......
    }
    
    class ItemViewModel
    {
         string p1;
         ......
         string storeInfo1;
         Item item;
    
         ItemViewModel(Item item, string storeInfo)
         {
            this.item= item;
            this.storeInfo1 = storeInfo;
         }
    }
    
    var temp = from a in items
               join b in stores on a.storeKey = b.storeKey into b2
               from c in b2.DefaultIfEmpty()
               select new ItemViewModel(a, c.storeInfo1);
    
    推荐文章