一个令我感到诡异的问题(MVC3)

吕小不 2013-05-02 01:30:45
我有一个张视图叫:v_UserInfo

在控制器中查询这张视图DIN为2的人员的所有信息

很奇怪,为什么返回了数据中会出现重复的数据

真的很令我诡异!
...全文
238 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
please_call_me_J 2013-05-03
  • 打赏
  • 举报
回复
既然linq转换成sql都没问题,那就是linq在遍历的过程中发生了某些值的变化,你要想办法跟踪到环境的变化是什么导致
吕小不 2013-05-03
  • 打赏
  • 举报
回复
引用 8 楼 bliuhuan 的回复:
哪儿来的重复数据??真心没看出来
你仔细看看,断点监测那张图……
落雁知秋 2013-05-03
  • 打赏
  • 举报
回复
哪儿来的重复数据??真心没看出来
F15Eagle 2013-05-03
  • 打赏
  • 举报
回复
where list.DIN==Id,这一句就是导致重复的根源吧,从贴的图看,重复比较多的数据Id是2和5的。
熊猫无敌 2013-05-03
  • 打赏
  • 举报
回复
看下微软MSDN的解释 Returns distinct elements from a sequence by using the default equality comparer to compare values. 你select出来的元素每一个显然不相等,怎么会只有一个值呢? 用group可以解决,大概如下: from list in ……………… where ... group by list.ID into 或者实现下IEquatable,见MSDN http://msdn.microsoft.com/en-us/library/bb348436.aspx
egojit8 2013-05-03
  • 打赏
  • 举报
回复
主键Id不重复,数据就不能算重复
吕小不 2013-05-03
  • 打赏
  • 举报
回复
引用 3 楼 juyangjia 的回复:
第一,把sql拿到数据库执行下
第二,数据库没有重复记录就跟踪程序代码一直到返回数据到前台的位置,看看是否改变了值
第三,看前台从接受到数据到呈现的过程中是否改变了值

试过了,Linq查询的时候,数据就发生重复了……然后我用断点跟踪了,结果如下:

然后用用Linq查询自动转换成的Sql去执行没有问题


对应的Linq的语句如下:
吕小不 2013-05-03
  • 打赏
  • 举报
回复
引用 17 楼 w_mojian180 的回复:
[quote=引用 7 楼 hengwang007 的回复:] where list.DIN==Id,这一句就是导致重复的根源吧,从贴的图看,重复比较多的数据Id是2和5的。
支持[/quote] 我就是 去掉这个条件判断 把整张视图 都查出来,问题还是一样,会发生数据叠加
路伊阑珊 2013-05-03
  • 打赏
  • 举报
回复
引用 7 楼 hengwang007 的回复:
where list.DIN==Id,这一句就是导致重复的根源吧,从贴的图看,重复比较多的数据Id是2和5的。
支持
吕小不 2013-05-03
  • 打赏
  • 举报
回复
引用 15 楼 qldsrx 的回复:
回过神来一想,不对啊,你给的是那个v_UserInfo类的定义,不是我要的v_UserInfo啊。
那个db.v_UserInfo肯定不是对应了v_UserInfo类型,如果真的就是那个类,无法使用from xxx in db.v_UserInfo的语法的,因为必须继承IEnumerable的类才能使用那个Linq查询。


我用Linq查形成这张视图的另外一张表(这张视图我用了两张表联接的),数据也没有发生叠加
就是Linq查这张视图的时候 就发生叠加了,而且断点看了,是info查询后就开始发生数据叠加


后来,我干脆不查这张视图了,直接用Linq联接那两张表,数据就没有发生叠加了……
qldsrx 2013-05-03
  • 打赏
  • 举报
回复
回过神来一想,不对啊,你给的是那个v_UserInfo类的定义,不是我要的v_UserInfo啊。 那个db.v_UserInfo肯定不是对应了v_UserInfo类型,如果真的就是那个类,无法使用from xxx in db.v_UserInfo的语法的,因为必须继承IEnumerable的类才能使用那个Linq查询。
qldsrx 2013-05-03
  • 打赏
  • 举报
回复
我看到你的数据,只有前面2行是反复重复的,而不是所有数据重复,给我的感觉是这两行是人为进行了数据叠加。如果说在info查询后,数据已经是重复的,这就比较奇怪了,我因为很早就放弃Linq TO Sql了,因此没法帮你验证(效率低)。不过你的Linq语句的确没写正确,那个Distinct语句形同虚设啊,如果不是加在里面,放在外面的话,必须写明属性比较器,否则按引用地址比较唯一而不是各个属性。
吕小不 2013-05-03
  • 打赏
  • 举报
回复
引用 12 楼 qldsrx 的回复:
查看你的v_UserInfo的定义,问题肯定是出在那里

这是v_UserInfo对应的类(是创建实体框架时候自动生成的)

这是我用sql查视图返回的结果

下面是用Linq查询的,结果就出现一些数据重复了

qldsrx 2013-05-03
  • 打赏
  • 举报
回复
查看你的v_UserInfo的定义,问题肯定是出在那里
吕小不 2013-05-03
  • 打赏
  • 举报
回复
没办法啊,弄了快两天了都没进展,只好不查那张视图了……直接用Linq联接表,问题解决了……
please_call_me_J 2013-05-02
  • 打赏
  • 举报
回复
第一,把sql拿到数据库执行下 第二,数据库没有重复记录就跟踪程序代码一直到返回数据到前台的位置,看看是否改变了值 第三,看前台从接受到数据到呈现的过程中是否改变了值
  • 打赏
  • 举报
回复
引用 1 楼 nice_fish 的回复:
重复? ID不同当然就没有重复了。
sorry,没看清内容,你拿sql语句去表里面查查看是不是也存在这样的数据?
  • 打赏
  • 举报
回复
重复? ID不同当然就没有重复了。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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