私は2つのテーブル、自分のモデルと各...マッチング二つのリスト
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;}
}
を持っている...と私は上のベースのマッチングBusinessMansにすべてFamilyMansを一致させることができるようにしたいですname
およびfav_color
。
私は現在のようなものがあります。
//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;
}
}
}
をそれが完了するまでにかなりの時間がかかります。
私はまた、foreach
で1つのリストをループし、LINQs FirstOrDefaultを使ってそれにマッチさせることを検討しましたが、効率はほぼ同じです。
FamilyMan
とBusinessMan
を一緒にマッチングさせるより良い方法はありますか?
最初の2つの匿名オブジェクトにそれぞれ一致する名前を付けなければなりませんでした。名前は' Name'、色は 'Color'です。これは本当にうまくいっています。可能ならば、 'Expected Expected'問題を解決するために質問を修正するために@Gerveを与えます。そうでなければ、私はこの答えを受け入れます。ありがとう! – TankorSmash
「一致する名前」は、両方のオブジェクトの 'new {Name = bm.name、Color = bm.color} 'のようなものです。たとえば、OrdersテーブルとOrderDetailsテーブルで列の名前が違っていた場合、匿名型に同じ名前を割り当てることで複合キーを作成することができます。 – TankorSmash