LINQ在SQL View查询中为一个特定列返回错误的值

时间:2016-06-27 15:07:42

标签: c# sql sql-server linq views

我的问题似乎很简单,但我无法弄清楚发生了什么。

我有以下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再次生成模型,以便通过代码生成来排序密钥,并且它也没用。

2 个答案:

答案 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”列的数据类型。他们应该匹配。