C# 如何在字典上执行sql联接<;字符串,列表<;字符串>>;?

C# 如何在字典上执行sql联接<;字符串,列表<;字符串>>;?,c#,sql,linq,C#,Sql,Linq,DictA是字符串,但DictB是字符串,列表(字符串) 下面的内容适用于两个没有列表的字符串字典,但是如何将字典与列表连接起来呢 from kvp2 in DictB join kvp3 in DictA on kvp2.Value equals kvp3.Key where kvp2.Key == prim_in.ToUpper() || kvp2.Key == ref_in.ToUpper() select new {Column1 = kvp2.Key, Column2 = kvp2.V

DictA是字符串,但DictB是字符串,列表(字符串)

下面的内容适用于两个没有列表的字符串字典,但是如何将字典与列表连接起来呢

from kvp2 in DictB
join kvp3 in DictA on kvp2.Value equals kvp3.Key
where kvp2.Key == prim_in.ToUpper() || kvp2.Key == ref_in.ToUpper()
select new {Column1 = kvp2.Key, Column2 = kvp2.Value, column3 = kvp3.Value};
这适用于列表的单个值,尽管我可以使用for循环来迭代该列表的长度,但每次我都希望重新合并它自己。(将kvp2.Value更改为kvp2.Value[0])


很难说这是否正是你想要的。如果您能提供一些预期输入/输出的示例,这将非常有帮助。如果我正确理解了您的问题,请尝试以下代码

var DictA = new Dictionary<string, string>();
var DictB = new Dictionary<string, List<string>>();

var query =
    (
        from b in DictB
        from a in DictA
            .Where(w => b.Value.Contains(w.Key))
        select new { C1 = b.Key, C2List = b.Value, C3 = a.Value }
    );

// SelectMany collapses the inner Select statement
var result = query.SelectMany(s => s.C2List.Select(s2 => new { C1 = s.C1, C2 = s2, C3 = s.C3 }));
var DictA=newdictionary();
var DictB=新字典();
变量查询=
(
从b到b
从格言中的一句话
其中(w=>b.Value.Contains(w.Key))
选择新{C1=b.键,C2List=b.值,C3=a.值}
);
//SelectMany折叠内部Select语句
var result=query.SelectMany(s=>s.C2List.Select(s2=>new{C1=s.C1,C2=s2,C3=s.C3}));

很难说这是否正是你想要的。如果您能提供一些预期输入/输出的示例,这将非常有帮助。如果我正确理解了您的问题,请尝试以下代码

var DictA = new Dictionary<string, string>();
var DictB = new Dictionary<string, List<string>>();

var query =
    (
        from b in DictB
        from a in DictA
            .Where(w => b.Value.Contains(w.Key))
        select new { C1 = b.Key, C2List = b.Value, C3 = a.Value }
    );

// SelectMany collapses the inner Select statement
var result = query.SelectMany(s => s.C2List.Select(s2 => new { C1 = s.C1, C2 = s2, C3 = s.C3 }));
var DictA=newdictionary();
var DictB=新字典();
变量查询=
(
从b到b
从格言中的一句话
其中(w=>b.Value.Contains(w.Key))
选择新{C1=b.键,C2List=b.值,C3=a.值}
);
//SelectMany折叠内部Select语句
var result=query.SelectMany(s=>s.C2List.Select(s2=>new{C1=s.C1,C2=s2,C3=s.C3}));

这是一个完整的示例,我认为您所追求的扩展连接

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var DictB = new Dictionary<string,List<string>>();
    var DictA = new Dictionary<string,string>();

    DictB.Add("abc", new List<string>() {"123","456"});
    DictA.Add("456","foo");
    DictA.Add("123","bar");

    var res = from kvp2 in DictB
               from kvp2v in kvp2.Value
               join kvp3 in DictA 
               on kvp2v equals kvp3.Key
               select new {Column1 = kvp2.Key, Column2 = kvp2v, Column3 = kvp3.Value};

    foreach ( var item in res) Console.WriteLine(item);
  }

}

这是一个完整的示例,我认为您所追求的扩展联接

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var DictB = new Dictionary<string,List<string>>();
    var DictA = new Dictionary<string,string>();

    DictB.Add("abc", new List<string>() {"123","456"});
    DictA.Add("456","foo");
    DictA.Add("123","bar");

    var res = from kvp2 in DictB
               from kvp2v in kvp2.Value
               join kvp3 in DictA 
               on kvp2v equals kvp3.Key
               select new {Column1 = kvp2.Key, Column2 = kvp2v, Column3 = kvp3.Value};

    foreach ( var item in res) Console.WriteLine(item);
  }

}

如果你能提供一个。请确保包含SQL结构、字典的示例数据、示例输入和预期输出。由于LINQ查询中没有包含任何数据库,因此这与SQL无关。这是一个纯LINQ到对象的问题。如果你能提供一个。请确保包含SQL结构、字典的示例数据、示例输入和预期输出。由于LINQ查询中没有包含任何数据库,因此这与SQL无关。这是一个纯LINQ到对象的问题。