我的问题似乎很简单,但我无法弄清楚发生了什么。
我有以下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,字符串,日期...如果我在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返回的索引不同。
这是一个常见问题吗?是否容易纠正或解决?它可能是View本身的错误?
修改
根据您的一些建议,我检查了实体框架实体中唯一键和字段之间的关系。我在两个EF实体中放了几个正确排序的键,结果是一样的。我得到了我的LINQ生成的SQL查询,它给出了与我上面发布的结果完全相同的结果。我还使用数据库中的Code-First再次生成模型,以便通过代码生成来排序密钥,并且它也没用。
答案 0 :(得分:1)
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();
答案 1 :(得分:0)
检查db.vw_InstanciaCarteira和db.VW_PROJETOS中“CodigoProjeto”列的数据类型。他们应该匹配。