C# Linq:按一列分组,但必须与另一列不同

C# Linq:按一列分组,但必须与另一列不同,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,在我的linq查询中,我想查询具有visitId和deviceId的服务表。我希望能够通过访问分组,但设备ID不同。目前,通过我的设置,我可以通过visitId进行分组,但当访问相同时,我无法在结果中显示disitnct设备 from s in db.Services.Where(condition) where s.Active && (hasSupportGeneralAccess || s.Visit.Site.Branch.Users.A

在我的linq查询中,我想查询具有visitId和deviceId的服务表。我希望能够通过访问分组,但设备ID不同。目前,通过我的设置,我可以通过visitId进行分组,但当访问相同时,我无法在结果中显示disitnct设备

from s in db.Services.Where(condition)
                 where s.Active && (hasSupportGeneralAccess || s.Visit.Site.Branch.Users.Any(u => u.Id == userId)) && s.Device != null
                 orderby s.Visit.Start descending
                 group s by s.Visit into newgroup
                 select newgroup.FirstOrDefault()

非常感谢您的帮助

按访问分组后,您的所有实体(我猜是一个服务,因为它来自一个称为服务的集合)都位于与给定访问相关联的集合中。如果您想知道该列表中的不同设备,可以询问:

select newgroup.Select(x => x.Device).Distinct()

newgroup就像一个
列表
,服务的属性之一是设备。如果我给你一个
列表
并要求其中包含所有不同的设备,你会从列表中选择该设备,然后要求使用不同的设备。。这没有什么不同,除了每次独特的访问都有一个列表,而不是一个列表-如果有10次访问,那么就有10次
列表
您需要处理

在这种情况下,我们可以将访问和设备的组合分组,如下所示,以便为同一次访问获得重复的设备

from s in db.Services.Where(condition)
where s.Active && (hasSupportGeneralAccess ||  s.Visit.Site.Branch.Users.Any(u => u.Id == userId)) && s.Device != null orderby s.Visit.Start descending
group s by (s.Visit + "." + s.Device) into newgroup
select newgroup.FirstOrDefault();

感谢您的回答和澄清,这很有意义。我只是得到了一个无法隐式转换类型System.Linq.IQueryable到System.Collections.Generic.IEnumerableWhat是您将查询结果分配给的对象?我会在查询语法中继续,但tbh似乎没有太多意义,因为它没有明确的操作。您可以提供您所拥有的示例吗,哪些是有效的?