表:
地区 | 商品名称 | 数量 |
北京 | 电视 | 1 |
北京 | 冰箱 | 3 |
上海 | 电视 | 3 |
浙江 | 冰箱 | 5 |
x..++ | y..++ |
要生成如下统计结果(行和列动态变化):
商品名称 | 北京 | 上海 | 浙江 | x..++ |
电视 | 2 | 3 | 4 | 5 |
冰箱 | 5 | 4 | 5 | 4 |
y++++… | 4 | 78 | 8 | 5 |
兄弟我用EF时间不长,感觉EF做这种交叉统计表非常蛋疼,没办法定义模型,请问大家是如何实现的,难道也是通过后端存储过程?或通过拼接计算生成并返回DataTable?
用存储过程也没法定义模型,这里和EF无关。无法定义模型(我猜测你指的是结果集)是因为查询结果的列是不确定的(模型的属性是不确定的),可以使用dynamic object或者匿名对象来解决这个问题。
通常来说,针对这种情况,我们不会用类型来解决,而是使用DataTable来处理。
同时,你应该尽可能的理解你的需求,以做出正确的选择,
比如,我假设一种场景:最终显示的统计结果集包含全国 23 个省份,那么我们就可以定义一个包含23个属性的类型来承载统计结果,这样,在其它地方我们就可以通过类型化的数据来访问统计结果。
如果我们的统计结果是用于输出,比如web service的返回结果,写入数据库表或其它存储设备等,那么我们应该关心的是如何把结果转换为一种数据传输格式,那么我们就可以设计一个通用的方式能够将强类型集合、匿名对象集合、动态对象集合、DataTable转换为XML、二进制等。
把你的行转列写成一个视图,然后在EF里添加这个视图在生成他的模型就行了
用存储过程也是可以的,但需要注意的是,在存储过程里的sql语句不要用字符串拼接的方式,这样EF在生成返回结果集时是获取不到结果集列名的