我有一个 Rigmodel 类,在 RigModel 类中我有 RigDetails 类作为属性。我在 RigModel 的构造函数中初始化 RigDetails,如下所示。
public class RigModel
{
public RigModel()
{
Rig = new Rigdetails();
}
public Rigdetails Rig { get; set; }
}
public class Rigdetails
{
public string Id { get; set; }
public string Title { get; set; }
public bool Enabled { get; set; }
}
我还有另一个类 JobModel。
public class JobModel
{
public string Id { get; set; }
public string Job_code { get; set; }
public string Product_line { get; set; }
public string Geomarket { get; set; }
public string Roc { get; set; }
public string Network { get; set; }
public string Rig { get; set; }
public string Simple_help { get; set; }
public string Created { get; set; }
public string Modified { get; set; }
public string Modified_by { get; set; }
}
我有两个单独的列表工作模型和装备模型与上述两个类。现在将两个列表属性绑定到新模型(JobRigBsonModel)中。使用下面的查询。
var result = jobModels.Join(rigModels, j => j.Rig, r => **r.Rig.Id**, (j, r) =>
new RigJobBsonModel
{
Id = j.Id,
Job_code = j.Job_code,
Product_line = j.Product_line,
Geomarket = j.Geomarket,
Roc = j.Roc,
Network = j.Network,
Simple_help = j.Simple_help,
Created = j.Created,
Modified = j.Modified,
Modified_by = j.Modified_by,
Rigs = new Rig { Title = r.Rig.Title, Enabled = r.Rig.Enabled }
});
在上面的查询中出现粗体错误“对象引用未设置到对象的实例”。我怎样才能得到加入班级的结果? 下面是被调用的整个函数。
private static List<RigJobBsonModel> updateJobWithRigDetails(
List<JobModel> jobModels, List<RigModel> rigModels)
{
try
{
var result = jobModels.Join(rigModels, j => j.Rig, r => r.Rig.Id, (j, r) =>
new RigJobBsonModel
{
Id = j.Id,
Job_code = j.Job_code,
Product_line = j.Product_line,
Geomarket = j.Geomarket,
Roc = j.Roc,
Network = j.Network,
Simple_help = j.Simple_help,
Created = j.Created,
Modified = j.Modified,
Modified_by = j.Modified_by,
Rigs = new Rig { Title = r.Rig.Title, Enabled = r.Rig.Enabled }
});
return result.ToList();
}
catch (System.Exception ex)
{
throw ex;
}
}
下面是现有的模型,我在使用上面的 linq 查询进行查询时绑定它。
public class RigJobBsonModel
{
public string Id { get; set; }
[BsonElement]
public string Job_code { get; set; }
[BsonElement]
public string Product_line { get; set; }
[BsonElement]
public string Geomarket { get; set; }
[BsonElement]
public string Roc { get; set; }
[BsonElement]
public string Network { get; set; }
[BsonElement]
public string Simple_help { get; set; }
[BsonElement]
public string Created { get; set; }
[BsonElement]
public string Modified { get; set; }
[BsonElement]
public string Modified_by { get; set; }
#nullable enable
[BsonElement]
public RigDetails? Rigs { get; set; }
}
不要设置为可为空。 - 如果没有找到 - 对象将为空, 你加入的方式 - 就像内部加入 这是示例(请告诉我它是否解决了您的问题)
void Main()
{
var jobModels = new List<JobModel>() { new JobModel() {
Id = "1",
Rig = "1",
Job_code = "000", Network = "www", Product_line = "sale", Created = DateTime.Now.ToString()
},
new JobModel() {
Id = "2",
Rig = "3",
Job_code = "000", Network = "www", Product_line = "sale", Created = DateTime.Now.ToString()
}};
var rigModels = new List<RigModel>() { new RigModel() { Rig = new Rigdetails() {
Id = "1" ,Title="rig1", Enabled= true
} }};
var result = jobModels.Join(rigModels, j => j.Rig, r => r.Rig.Id, (j, r) =>
new RigJobBsonModel
{
Id = j.Id,
Job_code = j.Job_code,
Product_line = j.Product_line,
Geomarket = j.Geomarket,
Roc = j.Roc,
Network = j.Network,
Simple_help = j.Simple_help,
Created = j.Created,
Modified = j.Modified,
Modified_by = j.Modified_by,
Rigs = new Rigdetails { Title = r.Rig.Title, Enabled = r.Rig.Enabled, Id = r.Rig.Id }
});
result.Dump();
}
public class RigJobBsonModel
{
public string Id { get; set; }
public string Job_code { get; set; }
public string Product_line { get; set; }
public string Geomarket { get; set; }
public string Roc { get; set; }
public string Network { get; set; }
public string Simple_help { get; set; }
public string Created { get; set; }
public string Modified { get; set; }
public string Modified_by { get; set; }
public Rigdetails Rigs { get; set; }
}
public class JobModel
{
public string Id { get; set; }
public string Job_code { get; set; }
public string Product_line { get; set; }
public string Geomarket { get; set; }
public string Roc { get; set; }
public string Network { get; set; }
public string Rig { get; set; }
public string Simple_help { get; set; }
public string Created { get; set; }
public string Modified { get; set; }
public string Modified_by { get; set; }
}
public class RigModel
{
public RigModel()
{
Rig = new Rigdetails();
}
public Rigdetails Rig { get; set; }
}
public class Rigdetails
{
public string Id { get; set; }
public string Title { get; set; }
public bool Enabled { get; set; }
}
只有 1 个匹配结果(示例中的 Rig 3 不存在,因此不会链接)
如果您需要显示其他 RigJobBsonModel,则需要不同的技术来连接表。
另一种方法(基于之前的评论)
var lst = new List<RigJobBsonModel>();
jobModels.ForEach(fe =>
{
var rj = new RigJobBsonModel()
{
Id = fe.Id,
Job_code = fe.Job_code,
Product_line = fe.Product_line,
Geomarket = fe.Geomarket,
Roc = fe.Roc,
Network = fe.Network,
Simple_help = fe.Simple_help,
Created = fe.Created,
Modified = fe.Modified,
Modified_by = fe.Modified_by,
Rigs = rigModels.Where(rm => rm.Rig.Id == fe.Rig).FirstOrDefault()?.Rig
};
lst.Add(rj);
});
lst.Dump();
会回报你
请注意:
.FirstOrDefault()?.Rig