C# 如何将两个对象中的字段合并为一个?
我有以下几点C# 如何将两个对象中的字段合并为一个?,c#,linq,C#,Linq,我有以下几点 public class AnswerDetail { public int AnswerId { get; set; } public string Text { get; set; } public Nullable<bool> Correct { get; set; } public Nullable<bool> Response { get; set; } } 公共类应答器详细信息 { public int Answ
public class AnswerDetail
{
public int AnswerId { get; set; }
public string Text { get; set; }
public Nullable<bool> Correct { get; set; }
public Nullable<bool> Response { get; set; }
}
公共类应答器详细信息
{
public int AnswerId{get;set;}
公共字符串文本{get;set;}
公共可为空的正确{get;set;}
公共可空响应{get;set;}
}
- 从客户那里,我收到了一份带有Response字段的AnswerDetail 填充:应答器详细信息rfc
- 从数据库中,我收到了一个带有正确字段的AnwerDetail 回答:afd
更新:删除了ClientAnswers类以简化问题Maybee您可以尝试以下方法:
rfc.Select(r=>
new AnswerDetail
{
AnswerId =r.AnswerId,
Text=r.Text,
Response=r.Response,
Correct=afd.Single(c=>c.AnswerId==r.AnswerId).Correct
}
);
var combined = from rfcItem in rfc.Answers
join afdItem in afd.Answers on rfcItem.AnswerId equals afdItem.AnswerId
select new AnswerDetail
{
AnswerId = afdItem.AnswerId,
Text = afdItem.Text,
Correct = afdItem.Correct,
Response = rfcItem.Response
};
考虑到你已经有了来自客户端的
响应
字段,这实际上只是一个用数据库的正确答案更新结果的例子
foreach (var a in rfc)
{
a.Correct = afd.Answers.Single(x => x.AnswerId == a.AnswerId).Select(x => x.Correct);
}
您需要创建一个新的
AnswerDetail
,然后只需从正确的源设置属性即可
AnswerDetail adCombined = new AnswerDetail
{
AnswerId = afd.AnswerId,
Text = afd.Text,
Correct = afd.Correct,
Response = rfc.Response
};
我认为每个afd都有相应的rfc答案:
var zipped = from rows in afd.Answers
select new AnswerDetail()
{
AnswerId = rows.AnswerId,
Correct = rows.Correct,
Response = rfc.Answers.First(r=>r.AnswerId == rows.AnswerId).Response,
Text = rows.Text
};
您可以将整个ClientAnswer创建为:
var zipped = new ClientAnswers()
{
QuestionId = yourQuestionId,
Answers = (from rows in afd.Answers
select new AnswerDetail()
{
AnswerId = rows.AnswerId,
Correct = rows.Correct,
Response = rfc.Answers.First(r => r.AnswerId == rows.AnswerId).Response,
Text = rows.Text
}).ToList()
};
你的信息并没有提到列表 为什么不:
afd.Response = rfc.Response;
这两个列表是如何链接的?相对于问题ID,afd和rfc的AsnwerId是否相同?是的,回答ID匹配。我刚刚删除了另一个包含类,因为它使问题复杂化了,我可以做那部分。offtopic但是:你知道你可以写bool吗?不是空的?@gsharp-谢谢,我应该也将要改变它。你不能创建一个新的对象并设置适当的字段吗?
Where(…)。Single()
应该是Single(…)
。谢谢-你的答案是我认为第一个,所以我标记为正确。更多的答案我想标记为正确,但我只能标记一个正确,所以我比其他答案更正确。答案ID,文本和afd的正确性。它说。你使用了错误的变量,afd应该用于迭代,rfd用于单个语句我认为这里不需要投影,像我的回答中那样迭代和更新工作更少。实际上它们是单一的,因为OP已经编辑了question@trippino:不,它们以前是单个对象,但属于不同的tpye。不清楚单个ClientAnswers
对象是否包含一个或多个AnswerDetails
以及它们之间的关系。现在问题清楚了。OP想要创建一个包含回答细节的ICollection的ClientAnswer。OP编辑了这个问题,以简化问题。检查编辑历史记录。
afd.Response = rfc.Response;