我有2张桌子。
第一张表的架构:
第二张表的架构:
我需要将第一个表的UserId更改为第二个表的UserId,其中ReportId是相同的。
我的意思是:
List<FirstTable> tableFirst = new List<FirsTable>();
tableFirst = FirstTableBL.GetAll();
List<SecondTable> tableSecond= new List<SecondTable>();
tableSecond= SecondTableBL.GetAll();
for (int i = 0; i < tableSecond.Count(); i++)
{
tableSecond[i].UserId= tableFirst.FirstOrDefault(k => k.ReportId== tableSecond[i].ReportId).UserId;
}
但是我得到一个Null定义错误,因为tableSecond没有tableFirst的所有值。
这种情况的正确linq表达式是什么?
答案 0 :(得分:2)
单向,使用DefaultIfEmpty
:
tableSecond[i].UserId= tableFirst
.Where(k => k.ReportId== tableSecond[i].ReportId)
.Select(k => k.UserId)
.DefaultIfEmpty(new Nullable<int>()) // replace as desired
.First();
答案 1 :(得分:1)
FirstOrDefault
如果找不到任何内容,将返回null。您应该在代码中进行空检查,然后继续:
for (int i = 0; i < tableSecond.Count(); i++)
{
var fromTableFirst = tableFirst.FirstOrDefault(k => k.ReportId == tableSecond[i].ReportId)
if(fromTableFirst != null)
tableSecond[i].UserId = fromTableFirst.UserId;
}