我正在使用一个使用Entity Framework 4从数据库中检索数据然后在WPF DataGrid中显示它的应用程序。我检索的数据如下所示:
SCHEMATIC_ID SERIAL_NUM OUTAGE_DATE POSITION COMMENTS
1G1111G111G1 1199 4/17/2003 10 Filler
1G1111G111G1 1199 5/21/2004 10 Filler
1G1111G111G2 1962 4/17/2003 3 Filler
1G1111G111G2 1962 5/21/2004 3 Filler
1G1111G111G1 2017 5/21/2004 9 Filler
1G1111G111G1 226 5/21/2004 8
1G1111G111G1 290 5/21/2004 6
1G1111G111G1 291 5/21/2004 5
1G1111G111G1 295 5/21/2004 1
1G1111G111G1 65450 5/21/2004 3
1G1111G111G1 65451 5/21/2004 9 Filler
1G1111G111G1 65453 5/21/2004 6 Filler
1G1111G111G1 65458 4/17/2003 6
1G1111G111G1 65458 5/21/2004 6
1G1111G111G1 65459 5/21/2004 7
我需要转动数据,以便日期变为动态列标题(我不知道将会有多少日期),并且该位置属于每个SN / Schematic的日期。它应该是这样的:
SCHEMATIC_ID SERIAL_NUM 4/17/2003 5/21/2004 COMMENTS
1G1111G111G1 1199 10 10 Filler
1G1111G111G2 1962 3 3 Filler
1G1111G111G1 2017 9 Filler
1G1111G111G1 226 8
1G1111G111G1 290 6
1G1111G111G1 291 5
1G1111G111G1 295 1
1G1111G111G1 65450 3
1G1111G111G1 65451 9 Filler
1G1111G111G1 65453 6 Filler
1G1111G111G1 65458 6 6
1G1111G111G1 65459 7
我在微软论坛上找到this link,但我没有成功,因为我并不真正理解select语句中的Lambda。
这就是我从
开始的工作var query = (from p in context.PARTS_STAGING
where p.TN == SelectedTN
group p by new { p.PART_SERIAL_NUM, p.PART_SCH_NUM, p.COMMENTS } into g
select new PartStaging()
{
SerialNumber = g.Key.PART_SERIAL_NUM,
SchNumber = g.Key.PART_SCH_NUM,
Position = g.GroupBy(f => f.OUTAGE_DATE).Select(m => new { ?? }) // <- This is the part I can't get to work
Comments = g.Key.COMMENTS
});
任何帮助肯定会受到赞赏。
答案 0 :(得分:0)
从您的数据地图SCHEMATIC_ID SERIAL_NUM OUTAGE_DATE POSITION COMMENTS开始。 假设你有这些东西的集合。 Lamba与LINQ集成在一起,所以投入培训时间是值得的,但是在这里真的很快就会考虑到那些Scheama的样本
using (var db = new mydatabaseentities()){
var stuff = db.Database.SqlQuery<theTypeAbove>("Select * from table where...", SQLParms);
var filtered = stuff.Where(p=>p.SCHEMATIC_ID < 1000).Select(p=>p.OUTAGE_DATE_POSITION).ToList();
var filtered2 = stuff.Where(p=>p.SERIAL_NUM = 12345);
var filtered3 = stuff.Where(p=>COMMENTS.Length>100);
}
//IF you were able to get complete maps from EF and tables have good relations you could do this:
using (var db= new mydatabaseentitite()){
var stuff = db.MyTable.Where(p=>p.SCHEMATIC_ID==99);
}
在第一个示例中,它显示了如何发出有时是必要的原始sql查询,但不是将结果投影到由EF生成的实体类型中。 Filtered示例显示如何仅选择一个字段。虽然Filtered2示例显示了如何根据where条件选择所有字段。 Filtered3显示了如何使用字符串函数来过滤db中的数据。最后,第二个例子展示了如何在EF&#34中完成所有操作;不使用原始SQL而只使用LINQ&#34;。
Lambda只是简单地说在这里而不是在那里做的方法。它们建立在迭代器的概念之上,因此您不必设置foreach循环。 LINQ拥有大量支持Lambdas的方法,因此LINQ本身也值得在Gold中占据重要地位。这使得学习Lamdas对您的制作非常有利可图。