我有两个元素集合。我试图获取第一个集合中所有具有匹配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);
    }
}

最佳答案

您所做的基本上是一个连接,因此您可以使用 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);

关于c# - 有没有更清晰简洁的方式用更好的 LINQ 来表达这个语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13749436/

10-13 06:23