如何使用Dapper从数据库映射到字典?



我有一个类:

public class TestClass
{
public string value1 {get; set;}
public string value2 {get; set;}
public string value3 {get; set;}
public string value4 {get; set;}
}

和数据库:


Database - Test
id    code    value1    value2    value3     value4
--    ----    ------    ------    ------     ------
1     1000    xxxxx     xxxxx     xxxxx      xxxxx
2     1000    yyyyy     .....     .....      .....
3     1000    yyyy3     .....     .....      .....
4     1000    yyyy4
5     2000    yyyy5
6     2000    yyyy6
7     3000    yyyy7
8     3000    yyyy8
9     4000    yyyy9
10    4000    y9999

这将是4个键和4个TestClass列表。string是一个代码,其余是testClass列表。

我想把这个映射到这个字典:如果Code是相同的,把它添加到TestClass的列表中。

Dictionary<string, List<TestClass>> testDic = new Dictionary<string, List<TestClass>>();
testDic = conn.Query("SELECT * FROM Test").ToDictionary(x=> x.????) ;

怎么做?我想这是类似于思考的东西,但它不起作用?

看起来您正在尝试按code分组。要做到这一点,我可以这样做:

public class TestClass
{
public int Id {get;set;}
public string Code {get;set;}
public string Value1 {get; set;}
public string Value2 {get; set;}
public string Value3 {get; set;}
public string Value4 {get; set;}
}
/// ...
testDic = conn.Query<TestClass>("SELECT * FROM Test").ToLookup(x=> x.Code);

这里的ToLookup是标准的LINQ,它的工作原理很像Dictionary<TKey, List<TValue>>,但是是内置的(它本质上是很像GroupBy,但是打算被多次访问)。

如果你真的需要一本字典,那就更复杂了;ToDictionary不会真正帮助你,所以最实用的方法可能是:

var data = new Dictionary<string, List<TestClass>>();
foreach (var row in conn.Query<TestClass>("SELECT * FROM Test"))
{
if (!data.TryGetValue(row.Code, out var list))
{
data.Add(row.Code, list = new List<TestClass>());
}
list.Add(row);
}

相关内容

  • 没有找到相关文章

最新更新