Tôi có hai bảng, mỗi mô hình riêng của họ ...Matching hai Danh sách các loại khác nhau với nhau
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;}
}
... và tôi muốn để có thể phù hợp với tất cả FamilyMans đến BusinessMans phù hợp dựa trên name
và fav_color
.
Tôi hiện đang có một cái gì đó như:
//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;
}
}
}
nhưng phải mất khá thời gian để hoàn thành.
Tôi cũng đã xem xét vòng lặp trên một danh sách có foreach
và sau đó sử dụng LINQs FirstOrDefault để khớp với chúng, nhưng hiệu quả có vẻ giống nhau.
Có cách nào tốt hơn để đi về kết hợp FamilyMan
s và BusinessMan
s với nhau không?
Tôi phải thêm các tên trùng khớp vào hai đối tượng ẩn danh đầu tiên,' Name' và 'Color', tương ứng, và nó dường như hoạt động ngay lập tức. Điều này hoạt động thực sự tốt, tôi sẽ chỉ cung cấp cho @Gerve một phút để khắc phục truy vấn của anh ấy để giải quyết vấn đề 'Expression Expected' nếu có thể, nếu không tôi sẽ chấp nhận câu trả lời này. Cảm ơn! – TankorSmash
"tên phù hợp" là một cái gì đó như 'new {Name = bm.name, Color = bm.color}' cho cả hai đối tượng. Từ các tài liệu bạn đã liên kết: 'Ví dụ, nếu bảng Đơn hàng và bảng OrderDetails từng sử dụng các tên khác nhau cho cột của chúng, bạn có thể tạo các khóa tổng hợp bằng cách gán tên giống nhau trong các loại ẩn danh:' Cảm ơn một lần nữa! – TankorSmash