是否有更清晰简洁的方式用更好的LINQ来表达这种说法?

Sea*_*son 4 c# linq

我有两个元素集合.我试图在第一个集合中获取第二个集合中具有匹配ID的所有元素,并针对匹配元素运行CopyToDomain方法.

以下代码工作正常,但我对它的详细程度感到有些惊讶.ReSharper在这里没有推荐任何东西,但我想知道是否在这两个集合中进行交集然后将方法映射到元素上会更清楚吗?你会做出这样的改变吗,还是我应该停止烦恼并保持原样?

Task task = new Task();
IList<TaskAttributeDto> taskAttributeDtos = new List<TaskAttributeDto>();
taskAttributeDtos.Add(new TaskAttributeDto{ ID = 1});
taskAttributeDtos.Add(new TaskAttributeDto{ ID = 2});

foreach (TaskAttributeDto taskAttributeDto in taskAttributeDtos)
{
    TaskAttribute matching = task.TaskAttributes.FirstOrDefault(t => t.ID == taskAttributeDto.ID);
    if (matching != null)
    {
        taskAttributeDto.CopyToDomain(matching);
    }
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 11

你正在做的基本上是一个连接,所以你可以使用Linq连接语法:

var matches =
    from dto in taskAttributesDtos
    join attribute in task.TaskAttributes on dto.ID equals attribute.ID
    select new { dto, attribute};

foreach (var m in matches)
    m.dto.CopyToDomain(m.attribute);
Run Code Online (Sandbox Code Playgroud)