加入equals(startswith)一边的比较键

时间:2013-04-02 11:24:55

标签: c# linq join

我正在加入两个列表,一个带有总线路径,另一个带有作为总线子路径的磁盘路径。所以基本上我想加入diskpath.startswith(buspath)。问题是Join On只允许在equals的一侧使用一个键。

我想要这个:

Dictionary<string, string[]> disksPerBus;

Dictionary<string, string> busesHWPath;  // key Bus Path, Value Bus name
Dictionary<string, string> disksHWPath;  // Key Disk Path, Value Disk name 

from busHWPath in busesHWPath 
join diskHWPath in disksHWPath on diskHWPath.Key.StartsWith(busHWPath.Key)
...

最终目标是获取一个带有总线名称(busHWPath.Value)的字典(disksPerBus),以及连接到该总线的所有磁盘(diskHWPath.Value)。

1 个答案:

答案 0 :(得分:0)

如果总线词典的值也是唯一的(你的问题暗示):

Dictionary<string, string[]> disksPerBus = new Dictionary<string, string[]>();
foreach(var bkv in busesHWPath)
{
    string[] disks = disksHWPath.Where(dkv => dkv.Key.StartsWith(bkv.Key))
                     .Select(dkv => dkv.Value).ToArray();
    disksPerBus.Add(bkv.Value, disks); // this may fail if the value is not unique
}