日期:2014-05-18  浏览次数:21157 次

C# 筛选问题提问

从数据库中 select 到一张表

列1 列2
a a-1
a a-2
c c-2
a a-3
c c-1
a a-5
b b-3
c c-1
b b-2
b b-1

我想实现,将在“列1”中相同的 “列2” 的值都保存在一个数组里头

上表中的“列1” 有三个 不同项“a”“b”“c”; 列2 则是按列1 相同与否 分别到 a[],b[],c[] 数组中;

请问各位亲,我该怎么实现呢???

------解决方案--------------------
先将表放到dataset里:
然后用个for 语句 if 判断 第一列=a
a[i] = 对应列
同理判断B,c就可以了吧
------解决方案--------------------
循环、判断、向数据中写数据
------解决方案--------------------
用Linq

C# code
var query = from y in (from x in DataTable.Cast<DataRow>()
                       select new { a = x["列1"].ToString(), b = x["列2"].ToString() })
            group y by y.a into g
            select new { key = g.Key, values = g.Select(z => z.b).ToArray() };
foreach (var item in query)
{
    string name = item.key;
    string[] values = item.values;
    ...//你可以处理,已经归类放入数组了
}

------解决方案--------------------
探讨

天哪 什么时候能够我楼上的代码 总是那种似懂非懂的感觉

------解决方案--------------------
dim list as new dictionary(of string,list(of string))

循环数据库数据
if list.ContainsKey("列1") then
list("列1").add("列2")
else
list("列1")=new list(of string)
list("列1").add("列2")
end
------解决方案--------------------
如果你要转换成字典,用linq还是一行。
C# code
var query = from y in (from x in DataTable.Cast<DataRow>()
                       select new { a = x["列1"].ToString(), b = x["列2"].ToString() })
            group y by y.a into g
            select new { key = g.Key, values = g.Select(z => z.b).ToArray() };
Dictionary<string, List<string>> list = query.ToDictionary(x => x.key, x => x.values.ToList());

------解决方案--------------------
探讨

感觉 rayyu1989 的代码很精悍哦。

不知道是否可以。

dim list as new dictionary(of string,list(of string))
是下面这个意思吗??
dictionary<string s,list> list = new dictionary<string s,list>();

------解决方案--------------------
var source = from temp in dt.AsEnumerable()
group temp by temp.Field<string>("列1") into g
select new
{
key = g.Key,
g,
values = g.Select(t => t.Field<string>("列2")).ToArray()
};
foreach (var t in source)
{
string[] str= t.values;
}