C# 使用linq为列表中的字段赋值

C# 使用linq为列表中的字段赋值,c#,linq,C#,Linq,比如说,我有两个班:工人班和公司班 class worker { string name; string company_id; string company_name; } class Company{ string c_name; string c_id; } 现在,我想要一个linq,这样当company_id和c_id匹配时,将company_name分配给c_name。也就是说,公司名称最初为空。我想使用linq来填充值。假设您有一个工人和公司的列表,并且可以对它们进行迭代: fo

比如说,我有两个班:工人班和公司班

class worker {
string name;
string company_id;
string company_name;
}

class Company{
string c_name;
string c_id;
}

现在,我想要一个linq,这样当company_id和c_id匹配时,将company_name分配给c_name。也就是说,公司名称最初为空。我想使用linq来填充值。

假设您有一个
工人
公司
的列表,并且可以对它们进行迭代:

foreach (worker w in workers)
{
    if (companies.Any(c => c.c_id == w.company_id))
        w.company_name = companies.Where(c => c.c_id == w.company_id).Select(comp => comp.c_name).Single();
}

这就是你要找的吗

public class Worker 
{
    public string Name {get;set;}
    public string CompanyId {get;set;}
    public string CompanyName {get;set;}
}

public class Company
{
 public string Name {get;set;}
 public string Id {get;set;}
}


   var companyList = new List<Company>
    {
        new Company{Id = "1", Name = "Company 1"},
        new Company{Id = "2", Name = "Company 2"},
        new Company{Id = "3", Name = "Company 3"}
    };

    var workerList = new List<Worker>
    {
        new Worker{ Name = "Worker 1", CompanyId = "2" },
        new Worker{ Name = "Worker 2", CompanyId = "1" },
        new Worker{ Name = "Worker 3", CompanyId = "2" },
        new Worker{ Name = "Worker 4", CompanyId = "3" },
        new Worker{ Name = "Worker 5", CompanyId = "1" }
    };

workerList.ForEach(w => {
            w.CompanyName = companyList.FirstOrDefault(c=>c.Id == w.CompanyId)?.Name;
        });


foreach(var w in workerList)
{
    Console.WriteLine(w.Name+"-"+w.CompanyName);
    // ==> output will be
    //Worker 1-Company 2
    //Worker 2-Company 1
    //Worker 3-Company 2
    //Worker 4-Company 3
    //Worker 5-Company 1
}

加入并向公司发起项目?到目前为止你试过什么?
var workers =   (from worker in workerList
                join company in companyList
                on worker.CompanyId equals company.Id
                select new Worker 
                 {
                    Name = worker.Name,
                    CompanyId = worker.CompanyId,
                    CompanyName = company.Name
                 }).ToList();