我有一个类:
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);
}