2010-11-17 78 views
2

我有以下创建csv的方法。使用Func <T, TResult>代表

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.Quantity我加了这样的东西

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; 
    } 
+0

什么是你期待的是foreach循环实际上呢?目标并不清楚。 – 2010-11-17 12:29:10

+1

看起来他想将一个数组转换为多个参数。据我所知这是不可能的,至少不是这样。 – 2010-11-17 12:49:18

+0

给我们一个机会,并发布一个问题。 – greenoldman 2010-11-17 12:56:50

回答

2

的一种方法是改变params Func<T, string>[] columnsparams 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() 
       ); 
+0

感谢乔纳斯,你发现我需要什么(可能与答案)。你能扩展它吗,对不起,我无法完全想象它。 – frosty 2010-11-17 14:32:35

+0

见上面,我已经添加了这个新的提议的方法,我会怎么称呼它? – frosty 2010-11-17 14:39:36

+0

明天我会检查出来,但直到那时Linq'SelectMany'才有可能服务。 – 2010-11-17 23:36:18

相关问题