我试图查询一些结果来填充对象列表。当我使用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>()
,它就不会抛出任何错误。
答案 0 :(得分:0)
这相当于你的foreach,但它可能不会更快地运行:
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();
如果这不起作用,那么是因为正在评估的事物的顺序不同,而某些事情正在执行时更改源中的值。在评估ProcessPersonList或item.Game时是否会进行处理,这可能会改变其中任何一个的值(或_myRepository.GetAll返回的值)?