Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用单个linq查询获取多个列表?_C#_Linq - Fatal编程技术网

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());