我的问题似乎很简单,但是我不知道发生了什么。
我有以下LINQ查询:
(from p in db.VW_PROJETOS
join ic in db.vw_InstanciaCarteira
on p.CodigoProjeto equals ic.CodigoProjeto
where ic.CodigoCarteira == 125
orderby p.CodigoProjeto
select p).ToList();
它从VW_PROJETOS返回9个条目,如id, fk, string, date…如果我在SQL Server Management Studio中执行相同的查询,如下所示
select * from VW_PROJETOS p
inner join vw_InstanciaCarteira ic on p.CodigoProjeto = ic.CodigoProjeto
where ic.CodigoCarteira = 125
order by p.CodigoProjeto
将返回相同的9个条目,每个条目具有相同的数据,除了列"Desempenho"。下面是一个简短的例子:
SQL Server返回:
CodigoProjeto NomeProjeto Desempenho
13 Projeto 1 Satisfatório
1247 Projeto 2 NULL
1435 Projeto 3 Crítico
LINQ查询返回
CodigoProjeto NomeProjeto Desempenho
13 Projeto 1 Crítico
1247 Projeto 2 Crítico
1435 Projeto 3 Satisfatório
我看到了一些使用ROW_NUMBER
为视图创建索引的例子,以帮助LINQ在使用视图时不丢失自己,但我不能使它正确工作(在SQL查询中显示的索引总是不同于LINQ返回的索引)。
这是一个普遍的问题吗?是否容易纠正或变通?它可能是视图本身的错误?
编辑:
根据您的一些建议,我检查了实体框架实体中唯一键和字段之间的关系。我在两个EF实体中正确地排列了几个键,但结果是一样的。我得到了由我的LINQ生成的SQL查询,它给出了与我上面发布的完全相同的结果。我还再次生成了模型,使用code - first从数据库,为了有键排序的代码生成,这是无用的,以及
Use this query.
(from p in db.VW_PROJETOS
join ic in db.vw_InstanciaCarteira
on p.CodigoProjeto equals ic.CodigoProjeto
where ic.CodigoCarteira == 125
orderby p.CodigoProjeto
select new {
CodigoProjeto=p.CodigoProjeto,
NomeProjeto=p. NomeProjeto,
Desempenho=ic.Desempenho
}.ToList();
检查两个数据库中列"CodigoProjeto"的数据类型。vw_instancacarteira和db.VW_PROJETOS。