我想弄清楚为什么LINQ中的简单查询返回奇数结果。LINQ查询返回多个副本的第一个结果
我有一个在数据库中定义的视图。它基本上汇集了其他几张表并进行一些数据传输。除了处理大型数据集并且可能有点慢之外,它确实没有什么特别之处。
我想查询这个基于long的视图。下面的两个示例查询显示对此视图的不同查询。
var la = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).ToList();
var deDa = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).Select(p => new { p.AccountNumber, p.SecurityNumber, p.CUSIP }).ToList();
第一个应该退回列表。第二个将是一个匿名对象的列表。
当我在实体框架这些查询第一个将手我回到结果,其中他们都是一模一样的列表。
第二个查询将手我回数据,其中的帐号是我查询和其他值不同的一个。这似乎是在每个帐号的基础上做到这一点,即如果我要查询一个帐号或另一个帐号的所有位置对象将具有相同的值(该帐户的位置列表中的第一个)和第二个账户将拥有一组所有具有相同值的Position对象(同样,它是Position对象列表中的第一个)。
我可以写SQL是实际上是相同的或者两个EF查询。他们都回来了结果(如四),显示正确的数据,一个帐号与不同的证券号码。
这是为什么发生?有没有什么我可以做错的,这样如果我有第一个查询的四个结果上面的第一个记录的数据也出现在2-4的对象?
我不明白会造成这种情况/可能会造成这种情况。我向Google搜索了各种关键字,并没有看到有人遇到过这个问题。我们部分分类了位置类以增加功能(智能对象)和一些智能属性。甚至有一些构造函数提供了一些视图模型类型支持。这些都不是在请求中调用的(我对此99%肯定)。不过,我们在整个应用中都采用了相同的模式。
我能想到的唯一的事情是,在EDMX的映射是扭曲。如果EDMX中的“主键”在构造视图的方式上并不是唯一的,那么是否有这种方式会发生?我在想,将这个模型导入EDMX的开发者会让设计师自动选择独特的东西。
任何帮助会给haggered dev一些希望!
抓住生成的SQL脚本并在Management Studio中以交互方式运行它,以查看实际正在发生的事情 – 2010-04-08 19:20:40
如上所述,也许使用分析器查看正在执行的SQL。 – 2010-04-08 19:52:19