Mam dwie tabele, każdy z własnym modelem ...Dopasowany dwie listy różnych typów wraz
class FamilyMan
{
public int family_ID {get; set;}
public string name {get; set;}
public string fav_color {get; set;}
}
class BusinessMan
{
public int work_ID {get; set;}
public string name {get; set;}
public string fav_color {get; set;}
//unrelated data etc
public string job_title {get; set;}
}
... i chcę, aby być w stanie dopasować się do wszystkich FamilyMans Businessmans pasujące na podstawie name
i fav_color
.
Obecnie mam coś takiego:
//fill lists from database
var family_list = dbContext.FamilyMen.ToList();
var busy_list = dbContext.BusinessMen.ToList();
//create empty dict for matching the two types
var matches = new Dict<FamilyMan, BusinessMan>();
foreach (FamilyMan fam_man in family_list) {
foreach (BusinessMan busy_man in busy_list) {
//if both names and colors match, consider them a matching
//object and add them each to the dict
if (fam_man.name == busy_man.name &&
fam_man.color == busy_man.color) {
matches_MtO[fam_man] = busy_man;
}
}
}
ale zajmuje sporo czasu, aby zakończyć.
Zajrzałem również do pętli nad jedną listą z foreach
, a następnie za pomocą LINQs FirstOrDefault, aby je dopasować, ale wydajność wydaje się mniej więcej taka sama.
Czy istnieje lepszy sposób na dopasowanie do FamilyMan
s i BusinessMan
s razem?
Musiałem dodać pasujące nazwy do dwóch pierwszych anonimowych obiektów, odpowiednio" Nazwa "i" Kolor ", i wydawało się, że działają natychmiast. To działa bardzo dobrze, po prostu daję @Gerve minutę, aby naprawić swoje zapytanie, aby rozwiązać problem z wyrażeniem "Expression Expected", jeśli jest to możliwe, inaczej przyjmuję tę odpowiedź. Dzięki! – TankorSmash
"Nazwy pasujące" to coś takiego jak "nowe {Nazwa = nazwa_bł., Kolor = bm.kolor}" dla obu obiektów. Z połączonych dokumentów: 'Na przykład, jeśli tabela Zamówienia i Tabela Zamówień zamówień używają różnych nazw dla swoich kolumn, można utworzyć klucze złożone, przypisując identyczne nazwy w anonimowych typach:' Jeszcze raz dziękuję! – TankorSmash