2015-11-29 42 views
2

我正在閱讀很多網站以獲得Linq-Group Join的更好的想法。Group加入Linq C#

var customers = new Customer[] 
{ 
    new Customer{Code = 5, Name = "Sam"}, 
    new Customer{Code = 6, Name = "Dave"}, 
    new Customer{Code = 7, Name = "Julia"}, 
    new Customer{Code = 8, Name = "Sue"} 
}; 

// Example orders. 
var orders = new Order[] 
{ 
    new Order{KeyCode = 5, Product = "Book"}, 
    new Order{KeyCode = 6, Product = "Game"}, 
    new Order{KeyCode = 7, Product = "Computer"}, 
    new Order{KeyCode = 7, Product = "Mouse"}, 
    new Order{KeyCode = 8, Product = "Shirt"}, 
    new Order{KeyCode = 5, Product = "Underwear"} 
}; 
     var query = customers.GroupJoin(orders, 
      c => c.Code, 
      o => o.KeyCode, 
      (c, result) => new Result(c.Name, result));//why mention c here?? 

     // Enumerate results. 
     foreach (var result in query) 
     { 
      Console.WriteLine("{0} bought...", result.Name); 
      foreach (var item in result.Collection) 
      { 
       Console.WriteLine(item.Product); 
      } 
     } 

我不明白爲什麼它給(c,結果)?如果寫成(c,o)會怎麼樣?

任何人都可以分享想法嗎?

回答

2

這些只是傳遞給Func的參數名稱。你可以使用你想如果讓你即代碼更加清晰的任何名稱:

 var query = customers.GroupJoin(orders, 
     c => c.Code, 
     o => o.KeyCode, 
     (something1, something2) => new Result(something1.Name, something2)); 

,因爲它會剛剛從前面兩個funcs中傳遞參數到最後一個是Func<TOuter, IEnumerable<TInner>, TResult>,所以在這種情況下Func<Customer, IEnumerable<Order>, Result>

這是相同的,與這樣的情況:

public Result DoStuff(Order nameMeAnyWayYouWant, Customer meToo) 
{ 
    //do stuff here 
} 

從問題的代碼是:http://www.dotnetperls.com/groupjoin

我補充說,筆者跳過如果有人想闡述和案例模型類dotnetperls.com下降:

class Customer 
{ 
    public int Code { get; set; } 
    public string Name { get; set; } 
} 

class Order 
{ 
    public int KeyCode { get; set; } 
    public string Product { get; set; } 
} 

class Result 
{ 
    public string Name { get; set; } 
    public IEnumerable<Order> Collection { get; set; } 
    public Result(string name, IEnumerable<Order> collection) 
    { 
     this.Name = name; 
     his.Collection = collection; 
    } 
} 
+0

感謝您的回覆。所以你的意思是說var query = customers.GroupJoin(訂單, c => c.Code, o => o.KeyCode, (c,result)=> new Result(c.Name,result));和var query = customers.GroupJoin(orders, c => c.Code, o => o.KeyCode, (o,result)=> new Result(o.Name,result));是一樣的嗎?如果是這樣的話,C,O的作用是什麼? –

+0

當然。你可以任何你想要的方式命名參數。與方法中聲明的參數相同,命名僅僅是化妝品。 – mwilczynski