首页 新闻 赞助 找找看

请问entity framework中行转列的交叉表统计,大家是如何做的。

0
悬赏园豆:20 [已解决问题] 解决于 2012-07-26 17:53

表:

地区 商品名称 数量
北京 电视 1
北京 冰箱 3
上海 电视 3
浙江 冰箱 5
x..++ y..++  

 

要生成如下统计结果(行和列动态变化):

商品名称 北京 上海 浙江 x..++
电视 2 3 4 5
冰箱 5 4 5 4
y++++… 4 78 8 5
         

 

兄弟我用EF时间不长,感觉EF做这种交叉统计表非常蛋疼,没办法定义模型,请问大家是如何实现的,难道也是通过后端存储过程?或通过拼接计算生成并返回DataTable?

yn.ymf的主页 yn.ymf | 初学一级 | 园豆:184
提问于:2012-07-25 22:53
< >
分享
最佳答案
2

用存储过程也没法定义模型,这里和EF无关。无法定义模型(我猜测你指的是结果集)是因为查询结果的列是不确定的(模型的属性是不确定的),可以使用dynamic object或者匿名对象来解决这个问题。

通常来说,针对这种情况,我们不会用类型来解决,而是使用DataTable来处理。

同时,你应该尽可能的理解你的需求,以做出正确的选择,

比如,我假设一种场景:最终显示的统计结果集包含全国 23 个省份,那么我们就可以定义一个包含23个属性的类型来承载统计结果,这样,在其它地方我们就可以通过类型化的数据来访问统计结果。

 

如果我们的统计结果是用于输出,比如web service的返回结果,写入数据库表或其它存储设备等,那么我们应该关心的是如何把结果转换为一种数据传输格式,那么我们就可以设计一个通用的方式能够将强类型集合、匿名对象集合、动态对象集合、DataTable转换为XML、二进制等。

收获园豆:19
Launcher | 高人七级 |园豆:45045 | 2012-07-26 09:38
其他回答(1)
0

把你的行转列写成一个视图,然后在EF里添加这个视图在生成他的模型就行了

收获园豆:1
Lyle Blog | 园豆:192 (初学一级) | 2012-07-26 17:49

用存储过程也是可以的,但需要注意的是,在存储过程里的sql语句不要用字符串拼接的方式,这样EF在生成返回结果集时是获取不到结果集列名的

支持(0) 反对(0) Lyle Blog | 园豆:192 (初学一级) | 2012-07-26 17:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册