当我使用Linq在C#代码中运行查询时,返回的结果不同于在sql server中运行的sql查询
SQL查询
SELECT TOP (1000) [Teamid]
,[TeamName]
,[TemplateId]
,[TemplateName]
FROM [MPFT_SendIT].[dbo].[VMTemplate]
where
Teamid=1
结果
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
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条记录。对如何解决此问题有帮助吗?
答案 0 :(得分:0)
为什么Contains()
?您应该改用等于运算符
_db.VMTemplates.Where(i => teamid == i.Teamid).ToList();
根据您的评论,Linq表达式应该可以正常工作。向其中添加一个ToList()
ViewBag.messageTemplate = _db.VMTemplates.Where(i =>
teamid.Contains(i.Teamid)).ToList();