在linq中设置来自多个联接的字段值

本文关键字:字段 linq 设置 | 更新日期: 2023-09-27 18:26:21

我有三种型号:

public class Job
{
    public string CustomerRef {get;set;}
    public string AddressRef {get;set;}
    public string JobStatusRef {get;set;}
    public string CustomerName {get;set;}
    public string AddressTown {get;set;}
    public string JobStatusName {get;set;}
}
public class JobStatus
{
    public string JobStatusRef {get;set;}
    public string JobStatusName {get;set;}
}
public class Customer
{
    public string CustomerRef {get;set;}
    public string AddressTown {get;set;}
}

所有这些模型都填充到列表对象中。

我想要一个返回包含字段的列表的方法:

CustomerName;
AddressTown;
JobStatusName;

使用来自其他2个列表对象的值设置

我创建了这个加入:

var query_join4 = from j in Data
                  join js in JobStatus.Data
                  on j.JobStatusRef equals js.JobStatusRef
                  join c in Customer.Data
                  on j.CustomerRef equals c.CustomerRef
                  select new
                  {
                     //what goes here??
                  };

此方法必须返回一种类型的List

我到处玩,但没有成功。。。

在linq中设置来自多个联接的字段值

看起来你已经非常接近了。假设查询的其余部分是可以的,您应该能够通过选择所需的字段来创建匿名类型,如下所示:

var query_join4 = from j in Data
                  join js in JobStatus.Data
                  on j.JobStatusRef equals js.JobStatusRef
                  join c in Customer.Data
                  on j.CustomerRef equals c.CustomerRef
                  select new
                  {
                      j.CustomerName,
                      c.AddressTown,
                      js.JobStatusName
                  };

如果您需要将其传递到程序的其他地方使用,您可能需要创建一个单独的类来存储这些值。

public class CustomerResult
{
    public string CustomerName { get; set; }
    public string AddressTown { get; set; }
    public string JobStatusName { get; set; }
}
...
select new CustomerResult
{
    CustomerName = j.CustomerName,
    AddressTown = c.AddressTown,
    JobStatusName = js.JobStatusName
}

如果您只想返回一个List<Job>,那么使用该类而不是新的类。

select new Job
{
    CustomerName = j.CustomerName,
    AddressTown = c.AddressTown,
    JobStatusName = js.JobStatusName
    // you may want to add the other fields too so your Job class is fully populated
}