常见来源和目的地清单

时间:2013-08-26 15:04:18

标签: c# linq generic-list

我有一个用于表示源文件的类和要复制它的目标位置:

public class SourceDestination
{
    public string Source { get; set; }
    public string Destination { get; set; }
}

我创建了一个SourceDestination列表,我试图从这个列表中找到子列表,其中多个源文件到达同一目的地,多个目的地接收相同的源文件。

例如,如果文件A和B转到目的地C,D和E以及文件F和G转到目的地C和D,则A,B,F和G共享两个相同的目的地,C和D.

由于SourceDestination类是源和目标配对,我如何在Linq中实现这种设置操作?

我尝试使用GroupBy对常见的源和目标进行分组,但似乎没有达到预期的效果:

StringBuilder sb = new StringBuilder();
var destinations = _sourceDestinations.GroupBy(sd => new { sd.Destination, sd.Source }).Select(g => g.First()).Select(sd => sd).ToList();

foreach (var destination in destinations)
{
    sb.AppendLine(destination.Source + " : " + destination.Destination);
    sb.AppendLine("");
}

1 个答案:

答案 0 :(得分:4)

您可以使用GroupBy查找具有共享源或目标的移动:

var commonDestinations = list.GroupBy(move => move.Destination)
    .Where(group => group.Count() > 1); //not sure if you want this line; you can omit if desired

var commonSources = list.GroupBy(move => move.Source)
    .Where(group => group.Count() > 1);