2016-04-20 4 views
0

Ich habe eine Reihe von generischen Klassen, die alle wie folgt aussehen:LINQ Spiel zwei Listen innerhalb einer select-Anweisung

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

... und ich sie in zwei Listen verwenden, TempResults (Column0-Column15) und Disagio (Column0-Column3). Jetzt möchte ich eine neue Liste erstellen, die 3 Spalten von TempResults und eine von Disagio enthält, wobei ich Disagio.Column1 mit TempResults.Column13 übereinstimmen muss und dann Disagio.Column2 zurückgeben muss (es gibt immer entweder 0 oder 1 Übereinstimmungen). Der gesamte Code:

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(); 

Was ich bisher versucht habe:

//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() 

Ich konnte das Problem mit einer Schleife lösen, aber ich möchte wirklich nicht zu. Die Listen sind nie zu lang, Speicher und Geschwindigkeit sind in diesem Fall weniger wichtig als Lesbarkeit.

+0

'Disagio' ist eine Liste dieser' Disagio' Objekte? – Kolky

+0

Disagio sieht so aus: 'List > Disagio' –

Antwort

2

Versuchen Sie folgendes:

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(); 
Verwandte Themen