C# 使用Func<;T、 TResult>;代表

C# 使用Func<;T、 TResult>;代表,c#,linq,C#,Linq,我有以下创建csv的方法 var csv = new CsvResult<MatrixCampaignLine>(matrixCampaignLines, fileName, CsvHelper.GetMatrixHeader(), x => x.RegionName, x => x.CustomerSku.ToString(), x => x.Pr

我有以下创建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()
 );
下面是调用的方法

public CsvResult(IEnumerable<T> data, string fileName, List<string> headers, params Func<T, string>[] columns)
{
    Data = data;
    Columns = columns;
    FileName = fileName;
    Headers = headers;
}   
public CsvResult(IEnumerable数据、字符串文件名、列表标题、params Func[]列)
{
数据=数据;
列=列;
FileName=文件名;
标题=标题;
}   
编辑:

  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;
    }
public IEnumerable数据{get;private set;}
public Func[]列{get;private set;}
public Func[]Cols{get;private set;}
公共字符串文件名{get;private set;}
公共列表头{get;private set;}
public CsvResult(IEnumerable数据、字符串文件名、列表标题、字符串用户名、params Func[]列)
{
数据=数据;
Cols=列;
FileName=文件名;
标题=标题;
}

一种方法是将
params Func[]columns
更改为
params Func[]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()
                );
var products=newlist{new products{Name=“Heliamphora chimantensis”,数量=7},new products{Name=“Dionaea muscipula”,数量=2};
var mcl=新MatrixCampainLine{RegionName=“Catalonia”,CustomerSku=“4711”,ProductName=“Nepenthes rajah”,数量=1,产品数量=products};
var data=新列表{mcl};
var list=新列表{“huvud”、“axlar”、“knä”、“och”、“tå”};
var csv=新CsvResult(数据,“牙买加太阳公主”,列表,“约书亚”,
x=>新字符串[]{x.RegionName},
x=>新字符串[]{x.CustomerSku},
x=>新字符串[]{x.ProductName},
x=>新字符串[]{x.Quantity.ToString()},
x=>x.ProductQuantites.Select(p=>p.Quantity.ToString()).ToArray()
);

您希望foreach循环实际做什么?现在还不清楚这里的目的是什么。看起来他想把一个数组转换成多个参数。据我所知,这是不可能的,至少不是那样。给我们一个机会,然后发布一个问题。谢谢乔纳斯,你能准确地回答我的要求(可能还有答案)。你能扩展它吗,对不起,我不能很好地可视化它。如上所述,我已经添加了这个新的建议方法,我怎么称呼它?我明天会查看它,但在此之前,Linq
SelectMany
可能会提供服务。
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()
                );