2

我有一个代表源文件的类和复制它的目的地:

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("");
}
4

1 回答 1

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);
于 2013-08-26T15:07:59.410 回答