我正在尝试弄清楚为什么LINQ中的简单查询会返回奇怪的结果。
我在数据库中定义了一个视图。它基本上将几个其他表组合在一起并进行一些数据处理。实际上,除了处理大型数据集并可能有点慢之外,它并没有什么特别之处。
我想根据一个长整型查询这个视图。下面是两个示例查询,用于查询此视图。
第一个查询应该返回一个列表。第二个查询将返回一组匿名对象列表。
当我在实体框架中执行这些查询时,第一个查询将返回一个结果列表,其中所有结果都完全相同。
第二个查询将返回数据,其中账号是我查询的账号,而其他值不同。这似乎是基于每个账号编号的,即如果我查询一个账号编号或另一个账号编号,则一个账户的所有头寸对象都具有相同的值(该账户的头寸列表中的第一个),而第二个账户将拥有一组具有相同值的头寸对象(同样是其头寸对象列表中的第一个)。
我可以编写SQL查询,其效果与任何两个EF查询相同。它们都返回正确数据的结果(例如四个结果),其中一个账号编号具有不同的证券编号。
为什么会发生这种情况???是否有什么我可能做错了的事情,以便如果我对上面的第一个查询有四个结果,则第一条记录的数据也会出现在2-4的对象中???
我无法理解会/可能导致这种情况发生的原因。我已经在Google上搜索了各种关键字,但没有看到任何人遇到这个问题。我们为Positions类分部分类出添加的功能(智能对象)和一些智能属性。甚至有一些构造函数提供了一些视图模型类型的支持。请求中没有调用任何这些内容(我确信99%)。但是,我们在整个应用程序中都使用了这种模式。
我唯一能想到的是EDMX中的映射有问题。如果EDMX中的“主键”实际上不是唯一的,那么是否有可能以这种方式发生,考虑到视图的构造方式?我认为导入此模型到EDMX中的开发人员让设计师自动选择了什么是唯一的。
任何帮助都将给一个疲惫的开发人员一些希望!
我在数据库中定义了一个视图。它基本上将几个其他表组合在一起并进行一些数据处理。实际上,除了处理大型数据集并可能有点慢之外,它并没有什么特别之处。
我想根据一个长整型查询这个视图。下面是两个示例查询,用于查询此视图。
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();
第一个查询应该返回一个列表。第二个查询将返回一组匿名对象列表。
当我在实体框架中执行这些查询时,第一个查询将返回一个结果列表,其中所有结果都完全相同。
第二个查询将返回数据,其中账号是我查询的账号,而其他值不同。这似乎是基于每个账号编号的,即如果我查询一个账号编号或另一个账号编号,则一个账户的所有头寸对象都具有相同的值(该账户的头寸列表中的第一个),而第二个账户将拥有一组具有相同值的头寸对象(同样是其头寸对象列表中的第一个)。
我可以编写SQL查询,其效果与任何两个EF查询相同。它们都返回正确数据的结果(例如四个结果),其中一个账号编号具有不同的证券编号。
为什么会发生这种情况???是否有什么我可能做错了的事情,以便如果我对上面的第一个查询有四个结果,则第一条记录的数据也会出现在2-4的对象中???
我无法理解会/可能导致这种情况发生的原因。我已经在Google上搜索了各种关键字,但没有看到任何人遇到这个问题。我们为Positions类分部分类出添加的功能(智能对象)和一些智能属性。甚至有一些构造函数提供了一些视图模型类型的支持。请求中没有调用任何这些内容(我确信99%)。但是,我们在整个应用程序中都使用了这种模式。
我唯一能想到的是EDMX中的映射有问题。如果EDMX中的“主键”实际上不是唯一的,那么是否有可能以这种方式发生,考虑到视图的构造方式?我认为导入此模型到EDMX中的开发人员让设计师自动选择了什么是唯一的。
任何帮助都将给一个疲惫的开发人员一些希望!