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

使用func<t,treult>delegate

  •  2
  • frosty  · 技术社区  · 15 年前

    我有以下创建csv的方法。

    var csv =  new CsvResult<MatrixCampaignLine>(matrixCampaignLines, fileName, CsvHelper.GetMatrixHeader(), x => x.RegionName,
                                 x => x.CustomerSku.ToString(),
                                 x => x.ProductName.ToString(),
                                 x => x.Quantity.ToString()
     );
    

    快乐的日子,直到我需要在最后一个属性调用中嵌套一个foreach。我需要通过matrixcampaignlines.products迭代。想象一下,在x之后,我加了这样的东西。

    x => x.Quantity.ToString(),
     foreach(var products in x => x.ProductQuantites)
            {
               x.Quantity,
             }
    

    下面是调用的方法。

    public CsvResult(IEnumerable<T> data, string fileName, List<string> headers, params Func<T, string>[] columns)
    {
        Data = data;
        Columns = columns;
        FileName = fileName;
        Headers = headers;
    }   
    

    编辑:

      public IEnumerable<T> Data { get; private set; }
        public Func<T, string>[] Columns { get; private set; }
        public Func<T, string[]>[] Cols { get; private set; }
        public string FileName { get; private set; }
        public List<string> Headers { get; private set; }
    
    
    
        public CsvResult(IEnumerable<T> data, string fileName, List<string> headers, string userName, params Func<T, string[]>[] columns)
        {
            Data = data;
            Cols = columns;
            FileName = fileName;
            Headers = headers;
        }
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   Jonas Elfström    15 年前

    一种方法是改变 params Func<T, string>[] columns params Func<T, string[]>[] columns 归还 ProductQuantites 作为数组,然后在 CsvResult .

    编辑2010-10-18

    不漂亮,我希望我能想出更好的办法,但这似乎奏效了。

    var products = new List<Product> { new Product {Name="Heliamphora chimantensis", Quantity=7}, new Product {Name="Dionaea muscipula", Quantity=2}};
    var mcl = new MatrixCampaignLine { RegionName = "Catalonia", CustomerSku = "4711", ProductName = "Nepenthes rajah", Quantity = 1, ProductQuantites=products };
    var data = new List<MatrixCampaignLine> { mcl };
    var list = new List<string> { "huvud", "axlar", "knä", "och", "tå" };
    var csv = new CsvResult<MatrixCampaignLine>(data, "Jamaica Jan Sun Princess", list, "joshua", 
                    x => new string[] {x.RegionName},
                    x => new string[] {x.CustomerSku},
                    x => new string[] {x.ProductName},
                    x => new string[] {x.Quantity.ToString()},
                    x => x.ProductQuantites.Select(p => p.Quantity.ToString()).ToArray()
                    );