日期:2014-05-18  浏览次数:20888 次

求一Enumerable扩展方法的写法
C# code

List<string[]> a = new List<string[]>()
{ 
    new string[] { "aa", "bb" }, 
    new string[] { "cc", "dd" } 
};
List<string[]> b = new List<string[]>()
{
    new string[] { "11" , "22"},
    new string[] { "33" , "44"}, 
    new string[] { "55" , "66"},
};
List<string[]> c = ________________

期望结果
c =
{
    {"aa", "bb", "11", "22"},
    {"aa", "bb", "33", "44"},
    {"aa", "bb", "55", "66"},
    {"cc", "dd", "11", "22"},
    {"cc", "dd", "33", "44"},
    {"cc", "dd", "55", "66"},
}



------解决方案--------------------
C# code

void Main()
{
    List<string[]> a = new List<string[]>()
    { 
        new string[] { "aa", "bb" }, 
        new string[] { "cc", "dd" } 
    };
    List<string[]> b = new List<string[]>()
    {
        new string[] { "11" , "22"},
        new string[] { "33" , "44"}, 
        new string[] { "55" , "66"},
    };
    
    List<string[]> query= (from x in a
                            from y in b
                             select x.Concat(y).ToArray()).ToList();
    query.ForEach(q=> Console.WriteLine(string.Join(",",q)));
   /*
    aa,bb,11,22
    aa,bb,33,44
    aa,bb,55,66
    cc,dd,11,22
    cc,dd,33,44
    cc,dd,55,66
   */

}

------解决方案--------------------
C# code

//好吧,我还是帖出SelectMany的写法吧
void Main()
{
    List<string[]> a = new List<string[]>()
    { 
        new string[] { "aa", "bb" }, 
        new string[] { "cc", "dd" } 
    };
    List<string[]> b = new List<string[]>()
    {
        new string[] { "11" , "22"},
        new string[] { "33" , "44"}, 
        new string[] { "55" , "66"},
    };
    
    var result=a.SelectMany(x=>b,(x,y)=>x.Concat(y).ToArray()).ToList();
    
//    List<string[]> query= (from x in a
//                            from y in b
//                             select x.Concat(y).ToArray()).ToList();
    result.ForEach(q=> Console.WriteLine(string.Join(",",q)));
   /*
    aa,bb,11,22
    aa,bb,33,44
    aa,bb,55,66
    cc,dd,11,22
    cc,dd,33,44
    cc,dd,55,66
   */

}

------解决方案--------------------
(1)
int[] a = { 1, 2, 3 };
int[] b = { 7, 8, 9, 10 };
//var query = from x in a
// from y in b
// select new { x, y };
var query = a.SelectMany(x => b.Select(y => new { x, y }));
Console.WriteLine(string.Join("\r\n", query.Select(x => string.Format("{0}, {1}.", x.x, x.y))));
------解决方案--------------------
(2)
int[] a = { 1, 2, 3 };
int[] b = { 7, 8, 9, 10 };
//var query = from x in a
// join y in b on 1 equals 1
// select new { x, y };
var query = a.Join(b, x => 1, x => 1, (x, y) => new { x, y });
Console.WriteLine(string.Join("\r\n", query.Select(x => string.Format("{0}, {1}.", x.x, x.y))));