在foreach查询工作时,Linq查询抛出异常

时间:2015-09-18 14:50:57

标签: c# linq foreach lambda

我试图查询一些结果来填充对象列表。当我使用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>(),它就不会抛出任何错误。

1 个答案:

答案 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返回的值)?