【C#】valueがlistのDictionary


 var mData = new Dictionary<string, List<string>>
 {
  { "X", new List<string>() { "あ", "い", "う" } },
  { "Y", new List<string>() { "か", "き", "く" } },
  { "Z", new List<string>() { "さ", "し", "す" } }
 };
 
 var sData = new Dictionary<string, List<string>>
 {
  { "X", new List<string>(){ "あ", "あ", "あ", "い", "う", "う" } },
  { "i", new List<string>(){ "subI1", "subI2", "subI3", "subI1", "subI1", "subI2" } },
  { "j", new List<string>(){ "subJ1", "subJ2", "subJ3", "subJ1", "subJ1", "subJ2" } }
 };
 
 var key = "X";
 
 var mDataValueSize = mData.Max(kv => kv.Value.Count); // valueのlistの要素数は全て同一と仮定
 var mSeq = Enumerable.Range(0, mainDataValueSize); // 第一引数は開始位置, 第二引数は個数で連続する配列
 foreach (var m in mSeq) {
  var keyValue = mData[key].ElementAt(m);
  var sIndex = sData[key].IndexOf(keyValue);
  var seq = sData[key].Where(kv => kv == linkingKeyValue).Count();
  var subSeq = Enumerable.Range(sIndex, seq);
  foreach (var s in subSeq) {
   var oneRec = sData.ToDictionary(kv => kv.Key, kv => kv.Value.ElementAt(s));
  }
 }