【发布时间】:2016-02-17 14:24:12
【问题描述】:
我有一个使用 LINQ 的 MVC4 Web 应用程序。
我有以下查询,它在 SQL 中产生 53 行。
select * from table1 t join
[table2] tpf on t.TestID=tpf.TestID
join
table3 pf on tpf.Test2ID =pf.Test2ID
join table4 pfp on
pf.Test3ID = pfp.Test3ID
join table5 p on pfp.Test5ID = p.Test5ID where t.testtypeid=1
order by pfp.Test3ID,pf.Test2ID
如果我转换如下相同的查询,它会返回更多记录。
trvm.MyTestVMs = (
from tt in db.table1s
join ttpf in db.table2s on tt.TestID equals ttpf.TestID
join pf in db.table3s on ttpf.Test2ID equals pf.Test2ID
join pfp in db.table4s on pf.Test3ID equals pfp.Test3ID
join p in table5s on pfp.Test5ID equals p.Test5ID
where tt.testtypeid == 1
orderby pfp.Test3ID
orderby pf.Test2ID
select new MyTestVM
{
FamilyID = pf.Test2ID,
ProductID = p.Test3ID,
Desc = p.Description
}
).ToList();
从 SQL 和上述 LINQ 得到的结果各不相同。实际上,我从 LINQ 查询中得到了一些重复的结果。造成这种差异的原因是什么?
【问题讨论】:
-
是数据库视图还是表?没有PK的表?
-
只是表格。表中有主键
-
修复你的
order by子句,然后像这样改代码var query = ( ...);(没有ToList()调用),然后var sql = query.ToString(); trvm.ProductFamilyProductVMs = query.ToList();,放一个断点,看看sql变量包含一个SQL查询文本。如果是,请使用文本可视化工具打开它,将其复制并粘贴到问题中。 -
用 sql 更新问题
-
生成的 SQL 包含一些冗余(重复)连接,不确定是否是问题所在,您可以尝试在数据库中执行它(将
@p__linq...替换为常量)并查看它是否返回正确数量的行与否。
标签: sql-server asp.net-mvc entity-framework linq entity-framework-6