2016-01-08 30 views
5

Mam problem z połączenia dwóch listę obiektów Oto one:scalić dwie listy obiektów

first one 
List<NSKData> NSKDataList = new List<NSKData>(); 

public class NSKData 
{ 
    public string ID { get; set; } 
    public string Issue { get; set; } 
    public string ToolTipInfoText { get; set; } 
    public NSKData() { } 
    public NSKData(string id, string issue, string tooltipinfo) 
    { 
     ID = id; 
     Issue= issue; 
     ToolTipInfoText = tooltipinfo; 
    } 
} 

second one 
List<IssuesMoreInfo> IssuesMoreInfoList = new List<IssuesMoreInfo>(); 

public class IssuesMoreInfo 
{ 
    public string ID { get; set; } 
    public string IssueMoreInfoText { get; set; } 
} 

Jeśli mogę uzyskać wszystkie potrzebne dane w jednym czasie, przyzwyczajenie to pytanie, ale ja przechwytuję wszystkie dane na pierwszą i dopiero wtedy, gdy mogę uzyskać dane dla drugiej.

Potrzebuję w rezultacie: , aby uzyskać IssueMoreInfo od drugiego, zgodnie z identyfikatorem w obu, tak jak dla id 10 w pierwszym, otrzymujemy kolumnę IssueMoreInfoText w drugim i przekazujemy ją do jednej listy w kolumna ToolTipInfoText

Nadzieja za pomoc, chłopaki, dzięki

+0

W tej chwili nie jest jasne, jak dokładnie ma wyglądać wydruk. Może pomóc, jeśli możesz podać przykład danych wejściowych i jaki powinien być wynik. – germi

+0

Zamierzam pobrać z niektórych bugtracker w Internecie, parsować i po wypełnieniu listy z danymi, czy to ważne? 'foreach (var rowrow w NeededIssuesDataList) { NSKDataList.Add (New NSKData() { J = rowrow.ID, Emisja = Problem ToolTipInfo = "brak informacji" }); } ' – GGodlike

+0

Czy otrzymujesz tę bazę danych? –

Odpowiedz

4

Zakładam szukasz Enumerable.Join:

var query = from data in NSKDataList 
      join info in IssuesMoreInfoList 
      on data.ID equals info.ID 
      select new NSKData(data.ID, data.Issue, info.IssueMoreInfoText); 
NSKDataList = query.ToList(); 

Innym sposobem, który nie musi odtworzyć wszystkie obiekty i listy:

var infoIdLookup = IssuesMoreInfoList.ToLookup(i => i.ID); 
foreach(NSKData data in NSKDataList) 
{ 
    data.ToolTipInfoText = infoIdLookup[data.ID] 
     .Select(i => i.IssueMoreInfoText) 
     .FirstOrDefault(); 
} 
2

Spróbuj użyć LINQ Dołącz

var query = from c in NSKDataList 
      join o in IssuesMoreInfoList on c.ID equals o.ID 
      select new { c.ID, c.Issues , c.ToolTipInfoText , o.IssueMoreInfo }; 

wola zapytanie zawiera informacje z obu listach

http://www.dotnetperls.com/join

0

Aby używać LINQ jest łatwiejsze:

NSKDataList.ForEach(nskData => nskData.ToolTipInfoText = IssuesMoreInfoList.Where(imf => imf.ID == nskData.ID).SingleOrDefault().IssueMoreInfoText); 

Co robi jest:

Foreach elementem NSKDataList zmieni jego ToolTipInfoText gdzie idziesz do IssuesMoreInfoList i przesączyć go przez ID na żądanie, a następnie dostać jeden zwrócony lub domyślne (jeśli został wybrany żaden) i uzyskać jej IssueMoreInfoText .