【急急】Linq问题,高分求解

xupeihuagudulei 2011-03-18 02:37:29
一个list名为:billTemplateAnalyseInfo.这个list中包含一个list:名为billTemplateTestItemInfo.
billTemplateTestItemInfo中的结构如下:
id name result
1 c1 0.1
1 c1 0.2
2 c2 0.1
2 c2 0.2
我想把这个结构变成
id name result1 result 2
1 c1 0.1 0.2
2 c2 0.1 0.2

...全文
160 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2011-03-18
  • 打赏
  • 举报
回复
虽然结贴了,但这个问题应该许多人会问。

回复下 ~


var list = new List<temp>
{
new temp {id = 1, name = "c1", result = 0.1},
new temp {id = 1, name = "c1", result = 0.2},
new temp {id = 2, name = "c2", result = 0.1},
new temp {id = 2, name = "c2", result = 0.2},
new temp {id = 3, name = "c2", result = 0.3}
};

var groupBy = list.GroupBy(t => t.result).ToList();

var query = from l in list
group l by new { l.id, l.name } into m
select new
{
id = m.Key.id,
name = m.Key.name,
result = m.Select(n => { return new { key = "result" + (groupBy.FindIndex(r => r.Key == n.result) + 1).ToString(), value = n.result }; })
.ToDictionary(e => e.key, e => e.value)
};




string title = "id{0}name{0}";

int index = 0;

var groupByStr = groupBy.Select(r => "result" + (++index).ToString()).ToArray();

Console.WriteLine(title + string.Join("\t", groupByStr), "\t");

foreach (var q in query)
{



Console.WriteLine(string.Format("{0}\t{1}\t{2}", q.id, q.name,
string.Join("\t",
groupByStr.Select(
r =>
q.result.Keys.Contains(r) ? q.result[r].ToString() : "")
.ToArray())));
}
V-Far 2011-03-18
  • 打赏
  • 举报
回复
从2005向2008进军。
初学linq。学习了。
不过有点难。还不适合我这个初学者。
先收藏。。。
xupeihuagudulei 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 q107770540 的回复:]

C# code

var query=from l in list
group l by new{l.id,l.name} into m
select new
{
id=m.Key.id,
name=m.Key.name,
……
[/Quote]最终这种写法可以了吗?
xupeihuagudulei 2011-03-18
  • 打赏
  • 举报
回复
//这样写 更好一些
var query=from l in list
group l by new{l.id,l.name} into m
let m1=m.FirstOrDefault()
let m2=m.LastOrDefault()
select new
{
id=m.Key.id,
name=m.Key.name,
result1=m1==null?0.0:m1.result,
result2=m2==null?0.0:m2.result
result3=....
result4=...

这个是动态的。根据前面 id name result
1 c1 0.1
1 c1 0.2
这个ID的行数出来的
};
q107770540 2011-03-18
  • 打赏
  • 举报
回复

var query=from l in list
group l by new{l.id,l.name} into m
select new
{
id=m.Key.id,
name=m.Key.name,
result=m.Select(n=>n.result).ToArray()
};


DataTable ItemArray
机器人 2011-03-18
  • 打赏
  • 举报
回复
List<T> 太难了。T的列都不定。用DataTable还能考虑下,分两步完成。
xupeihuagudulei 2011-03-18
  • 打赏
  • 举报
回复
result列是动态的
id name result
1 c1 0.1
1 c1 0.2
2 c2 0.1
2 c2 0.2
........
........
小童 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 q107770540 的回复:]
C# code

//这样写 更好一些
var query=from l in list
group l by new{l.id,l.name} into m
let m1=m.FirstOrDefault()
let m2=m.LastOrDefault()
select……
[/Quote]+
子夜__ 2011-03-18
  • 打赏
  • 举报
回复
猫的LINQ很牛啊 受教了
子夜__ 2011-03-18
  • 打赏
  • 举报
回复
这个是不是类似 GROUP之后 然后把行变成列的累加。
q107770540 2011-03-18
  • 打赏
  • 举报
回复

//这样写 更好一些
var query=from l in list
group l by new{l.id,l.name} into m
let m1=m.FirstOrDefault()
let m2=m.LastOrDefault()
select new
{
id=m.Key.id,
name=m.Key.name,
result1=m1==null?0.0:m1.result,
result2=m2==null?0.0:m2.result
};
q107770540 2011-03-18
  • 打赏
  • 举报
回复

void Main()
{
var list=new List<temp>{
new temp{ id=1,name="c1", result=0.1},
new temp{ id=1,name="c1", result=0.2},
new temp{ id=2,name="c2", result=0.1},
new temp{ id=2,name="c2", result=0.2}
};
var query=from l in list
group l by new{l.id,l.name} into m
select new
{
id=m.Key.id,
name=m.Key.name,
result1=m.First().result,
result2=m.Last().result
};

Console.WriteLine("id\tname\tresult1\tresult2");
foreach(var q in query)
{
Console.WriteLine(string.Format("{0}\t{1}\t{2}\t{3}",q.id,q.name,q.result1,q.result2));
}
/*
id name result1 result2
1 c1 0.1 0.2
2 c2 0.1 0.2

*/
}
class temp
{
public int id{get;set;}
public string name{get;set;}
public double result{get;set;}
}
q107770540 2011-03-18
  • 打赏
  • 举报
回复
id相同的数据 有几个result就新增几列resultN?
xupeihuagudulei 2011-03-18
  • 打赏
  • 举报
回复
把这个结构变成这样之后
id name result1 result 2
1 c1 0.1 0.2
2 c2 0.1 0.2

返回一个list

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧