C# LinqToSql-从嵌套列表中获取不同ID的列表

C# LinqToSql-从嵌套列表中获取不同ID的列表,c#,linq-to-sql,C#,Linq To Sql,我在一个类中有一个属性,我需要遍历关系中所有可能的不同ID 我是一个用户,属于一家公司。公司有许多解决方案,每个解决方案都有许多“解决方案门户”。我想要的是数据库中所有不同于“SolutionPortal”(SolutionPortal.PortalID)的“PortalID”的列表 我一辈子都不能把这个列成一张单子。我不断得到: var solutionIds = from s in this.Company.Solutions.Select(s=>s.SolutionPortals)

我在一个类中有一个属性,我需要遍历关系中所有可能的不同ID

我是一个用户,属于一家公司。公司有许多解决方案,每个解决方案都有许多“解决方案门户”。我想要的是数据库中所有不同于“SolutionPortal”(SolutionPortal.PortalID)的“PortalID”的列表

我一辈子都不能把这个列成一张单子。我不断得到:

var solutionIds = from s in this.Company.Solutions.Select(s=>s.SolutionPortals)
                  select s.Select(sp=> sp.PortalID);
当然,这是有意义的,因为有一个解决方案列表,有一个解决方案门户列表,但我只需要选择ID进入它们自己的列表

IEnumerable<IEnumerable<int>> // <-- Don't want this
IEnumerable<int> // <-- I want this

IEnumerable/您可能需要这样的东西:

var listOfIds = listOfSolutionPortals.SelectMany(sps => sps.Solutions)
                                     .Select(sp => sp.PortalId);
关键是:

var solutionIds = this.Company
                      .Solutions
                      .SelectMany(s=>s.SolutionPortals)
                      .Select(sp => sp.PortalId)
                      .Distinct();
这起到了作用:

var solutionIds = (from s in this.Company.Solutions
                   .SelectMany(s => s.SolutionPortals)
                   select s.PortalID).Distinct();

谢谢你,爸爸

这让我走上了正确的道路。谢谢我不知道“SelectMany”扩展。非常方便。我建议不要强迫自己使用查询表达式语法。我认为这更具可读性:
var solutionIds=this.Company.Solutions.SelectMany(s=>s.SolutionPortals.Select(s=>s.PortalID.Distinct()