【发布时间】:2015-12-15 18:38:03
【问题描述】:
我正在尝试查询一些结果以填充对象列表。当我使用 foreach 执行此操作时,它可以工作,但是当我尝试使用 linq lambda 表达式时,会引发空引用。另外我只不使用 foreach 代码,因为要花很多时间。
有人知道怎么回事吗?
Foreach 代码:
var aux = _myRepository.GetAll();
var processGames = new List<ProcessGamePersonDTO>();
foreach (var item in aux)
{
var processGame = new ProcessGamePersonDTO
{
IdProcessList = item.ProcessPersonList != null && item.ProcessPersonList.Any()
? item.ProcessPersonList.Select(x => x.Process.Id).ToList()
: new List<int>(),
IdGame = item.Game.Id,
GameName = item.Game.Name,
};
processGames.Add(processGame);
}
linq lambda 代码:
var aux = _myRepository.GetAll();
var processGames = aux.Select(item => new ProcessGamePersonDTO
{
IdProcessList = item.ProcessPersonList != null && item.ProcessPersonList.Any()
? item.ProcessPersonList.Select(x => x.Process.Id).ToList()
: new List<int>(),
IdGame = item.Game.Id,
GameName = item.Game.Name,
}).ToList();
此外,如果我将 Item.ProcessPersonList != null && Item.ProcessPersonList.Any() ? item.ProcessPersonList.Select(x => x.Process.Id).ToList() : new List<int>(), 替换为一些通用的 int 列表,例如 new List<int>(),它不会引发任何错误。
【问题讨论】:
-
使用调试器找出什么是空的。
-
第一个和第二个是相同的,两者都缺少 some 空检查(例如,
item.Game)但如果第一个有效,第二个也应该这样做(假设相同输入) -
只是好奇。用函数调用替换 ?: 看看会发生什么
-
@DaveZych IDProcessList 中抛出 ArgumentNUllException,并且抛出此错误的参数名称不在此查询使用的任何实体或对象中。
-
在声明
List<...>时,您将其命名为ProcessGamePersonDTO,之后您在哪里使用processGames?看起来像是语法错误。