Linq Sql Query结果不同于在数据库中运行的SQL查询

时间:2019-04-16 08:19:21

标签: c# sql linq

当我使用Linq在C#代码中运行查询时,返回的结果不同于在sql server中运行的sql查询

SQL查询

SELECT TOP (1000) [Teamid]
  ,[TeamName]
  ,[TemplateId]
  ,[TemplateName]
 FROM [MPFT_SendIT].[dbo].[VMTemplate]
 where
 Teamid=1

结果

enter image description here

VMTemplate视图的SQL查询

     SELECT        dbo.Team.Id AS Teamid, dbo.Team.TeamName, 
          dbo.MessageTemplate.Id AS TemplateId, 
            dbo.MessageTemplate.TemplateName
         FROM        dbo.Team INNER JOIN
                     dbo.TemplateLookup ON dbo.Team.Id = 
                    dbo.TemplateLookup.TeamId INNER JOIN
                    dbo.MessageTemplate ON dbo.TemplateLookup.TemplateId = 
                    dbo.MessageTemplate.Id
                     where
                     TeamId= 1

结果 enter image description here

Linq SQL

 var teamid = _db.TeamLookups.Where(i => i.UserId == 20).Select(x => 
  x.TeamId).ToList(); // teamid return value is 1

 ViewBag.messageTemplate = _db.VMTemplates.Where(i => 
 teamid.Contains(i.Teamid));

Linq查询仅返回sql查询的一条记录第1行,而不是预期的2条记录。对如何解决此问题有帮助吗?

1 个答案:

答案 0 :(得分:0)

为什么Contains()?您应该改用等于运算符

_db.VMTemplates.Where(i => teamid == i.Teamid).ToList();

根据您的评论,Linq表达式应该可以正常工作。向其中添加一个ToList()

ViewBag.messageTemplate = _db.VMTemplates.Where(i => 
 teamid.Contains(i.Teamid)).ToList();
相关问题