2016-04-20 2 views
0

У меня есть куча общих классов, которые все выглядят следующим образом:LINQ матч два списка внутри оператора выбора

public class MyList<T0, T1, T2> 
{ 
    public T0 Column0; 
    public T1 Column1; 
    public T2 Column2; 
} 

... и я их использования в двух списках, TempResults (Column0-Column15) и Disagio (Column0-Column3). Теперь я хочу создать новый список, содержащий 3 столбца из TempResults и один из Disagio, где мне нужно сопоставить Disagio.Column1 с TempResults.Column13, а затем вернуть Disagio.Column2 (всегда будет 0 или 1 совпадение). Весь код:

EndResults = TempResults 
    .Select(sel => new MyList<string, string, string, string> 
    { 
     Column0 = sel.Column0, 
     Column1 = //ugly part goes here, see below 
     Column2 = sel.Column1, 
     Column3 = sel.Column12 
    }) 
    .DistinctBy(x => x.Column0) 
    .ToList(); 

То, что я пытался до сих пор:

//Returns an empty list 
Disagio.Where(x => x.Column1 == sel.Column13).First().Column2.ToString() 


//It returns something, but I doubt it's correct 
Disagio.Join(TempResults, x => x.Column1, y => y.Column13, (a, b) => a).First().Column2.ToString() 

я мог бы решить эту проблему с помощью цикла, но я действительно не хочу. Списки никогда не будут слишком длинными, память и скорость менее важны, чем читаемость в этом случае.

+0

'Disagio' список этих объектов' Disagio'? – Kolky

+0

Disagio выглядит так: 'List > Disagio' –

ответ

2

Попробуйте это:

EndResults = 
    (
     from tr in TempResults 
     join d in Disagio on tr.Column13 equals d.Column1 
     select new MyList<string, string, string, string>() 
     { 
       Column0 = tr.Column0, 
       Column1 = d.Column2, 
       Column2 = tr.Column1, 
       Column3 = tr.Column12 
     } 
    ) 
     .DistinctBy(x => x.Column0) 
     .ToList(); 
Смежные вопросы