Я новичок в SQL и LINQ.Я попробовал простой код для объединения двух списков с использованием синтаксиса join...into
, но результат не тот, который я ожидал.
public static void Main(string[] args)
{
IEnumerable<KeyValuePair<char,int>> list1 = new []{
new KeyValuePair<char,int>( 'a', 1) ,
new KeyValuePair<char,int>( 'b', 2) ,
new KeyValuePair<char,int>( 'c', 3) };
IEnumerable<KeyValuePair<char, int>> list2 = new[]{
new KeyValuePair<char,int>( 'b', 10) ,
new KeyValuePair<char,int>( 'c', 20) ,
new KeyValuePair<char,int>( 'd', 30) };
var joinQuery = from x in list1
join y in list2
on x.Key equals y.Key into joinTable
from t in joinTable
select new { element = t };
foreach (var el in joinQuery)
Console.WriteLine(el);
}
Вывод:
{ element = [b, 10] }
{ element = [c, 20] }
Что я ожидал, так этоjoinTable
содержит объединенные записи, что-то вроде:
{element = {[b, 2], [b, 10]}}
{element = {[c, 3], [c, 20]}}
Можете ли вы объяснить, что на самом деле сделала часть ... into joinTable
, и почему я могу использовать x
в последнем выборе, а я не могу использовать y
:
var joinQuery = from x in list1
join y in list2
on x.Key equals y.Key into joinTable
from t in joinTable
select new { element = t,
first = x, // OK
second = y} // Error: The name y doesn't exist in the current context