C# 如何使用单个linq查询获取多个列表?
我有两个表,一个是C# 如何使用单个linq查询获取多个列表?,c#,linq,C#,Linq,我有两个表,一个是数据中心和子网 数据中心具有主键,子网的外键值为DatacenterId 我需要这样的结果,每个DatacenterId的不同列表来自Subnet表 Id DatacenterId name 1 1 kishore 2 1 .. 3 1 .. 4 2 .. 5 2
数据中心
和子网
数据中心
具有主键,子网
的外键值为DatacenterId
我需要这样的结果,每个DatacenterId
的不同列表来自Subnet
表
Id DatacenterId name
1 1 kishore
2 1 ..
3 1 ..
4 2 ..
5 2 ..
6 2 ..
我需要得到两个列表,一个是DatacenterId=1
另一个是DatacenterId=2
我当前的查询并不像我希望的那样有效,我不知道如何更正它
var myList = from o in db.EWB_SiteSubNet
where edbCenterIdList.Contains(o.DataCenterID)
select o;
当查询运行时,
myList
包含一个包含20条记录的列表。我需要的是2个列表,为表中每个唯一的DatacenterId
值列出一个。因此,例如,如果我的子网
表有4个唯一的数据中心ID
值,则查询输出需要是4个单独的列表。您永远无法从一个查询中获得多个集合。这只是所有风格的LINQ(对象、SQL和实体)的基本规则。返回值始终是IEnumerable
上的变量,具体取决于查询和LINQ的风格
但是,在查询中,您可以对对象进行分组并返回集合集合集合,因此这就是我们在这里需要采用的方法
因此,您最初的查询是有效的:
var myList = from o in db.EWB_SiteSubNet
where edbCenterIdList.Contains(o.DataCenterID)
select o;
但它只让您到达了一半,因为您只是从子网
返回与现有数据中心ID
匹配的所有记录
由于希望记录按DataCenterID
分组,因此需要执行以下操作:
现在,
myList
将是一个列表的集合(IEnumerable
在本例中),您可以迭代myList
以获取其中的各个列表。或者,您可以在查询中获得一点乐趣并创建一个字典(通过使用myList
,这样您就可以通过一个键值(例如DataCenterID)访问各个集合)。您确实需要自己付出更多努力,因为社区通常对“为我编写此代码”的响应不好问题。首先,给我们一个你自己尝试过的想法。向我们展示你的尝试接下来,让我们更好地了解您在输出中想要什么。我现在还不清楚您在输出列表中真正想要什么信息。我使用的是这个代码片段,var myList=from o in db.EWB_SiteSubNet,其中edbcenteridist.Contains(o.DataCenterID)选择o;这给了我20条记录的结果,代表DatacenterID=1的有10条记录,DatacenterID=2的有10条记录,我需要为每个DatacenterID获取单独的列表。如果我有4个DatacenterID,我需要4个列表。请将您的代码编辑到问题中。@psubsee2003您能帮助我生成查询吗?。谢谢您的建议。。您使用的是什么版本的LINQ?它显然不是LINQ to objects
,而是LINQ to Entities
还是LINQ to SQL
?
var myList = from o in db.EWB_SiteSubNet
where edbCenterIdList.Contains(o.DataCenterID)
group o by o.DatacenterId into g
select g.Select(r => r.ToList());