Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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中输出多个列表#_C#_Linq - Fatal编程技术网

C# 在单查询(LINQ)C中输出多个列表#

C# 在单查询(LINQ)C中输出多个列表#,c#,linq,C#,Linq,嗨,我正在寻找一种方法来阅读一次列表输出3个不同的列表 例如: Class Item { public int key {get; set;} public string name {get; set;} public bool CanTraid {get; set;} } 现在如果我有一个var myList=new list(),让它有30000个不同的项目 和var deleted_Items=new list(){xItem_1,xItem_2,…} var j_

嗨,我正在寻找一种方法来阅读一次列表输出3个不同的列表

例如:

Class Item 
{ 
   public int key {get; set;}
   public string name {get; set;}
   public bool CanTraid {get; set;}
}
现在如果我有一个
var myList=new list()
,让它有30000个不同的项目

var deleted_Items=new list(){xItem_1,xItem_2,…}

var j_1 =
      from i in myList 
      where i.key % 2 == 1
      select i ;

 var j_2 =
      from i in myList 
      where i.CanTraid == true
      select i ;

 var j_3 =
      from i in myList 
      join d in deleted_Items 
      where !(i.key == d.key)
      select i ;
所以我已经读了3次30K的条目,结果很糟糕

如果我能读一次那个列表,让它给我3个不同的列表,它会更温和

差不多

j_ALL
并让它像
j_ALL[0](j_1)
j_ALL[1](j_2)
j_ALL[2](j_3)


请随意评论您只需迭代一次,检查每个项目并决定应将其添加到哪个列表中:

var j_1 = new List<Item>();
var j_2 = new List<Item>();
var j_3 = new List<Item>();

foreach (var item in myList.Include(l => l.delete_items)
{
    if (item.key % 2 == 1) 
        j_1.Add(item);
    if (item.CanTraid)
        j_2.Add(item);
    if (item.key == item.delete_items.key)
        j_3.Add(item);
}
var j_1=新列表();
var j_2=新列表();
var j_3=新列表();
foreach(myList.Include中的var项(l=>l.delete\u项)
{
如果(item.key%2==1)
j_1.添加(项目);
如果(第项)
j_2.添加(项目);
if(item.key==item.delete_items.key)
j_3.添加(项目);
}
您可以按如下方式返回三个列表:

return new List<List<Item>>{j_1, j_2, j_3};
返回新列表{j_1,j_2,j_3};

所以你有三个序列,每个序列都有相同的类型。因为你说的是一个
列表,我假设你不必从数据库中获取数据:它们已经是IEnumerable,而不是IQueryable

IEnumerable<Item> J1 = ...
IEnumerable<Item> J2 - ...
IEnumerable<Item> J3 = ...
现在将它们转换为Loopkup表,使用标识符作为键,值作为元素。 这是唯一一次枚举序列:

ILookup<string, Item> lookupTable = itemsWithIdentifiers.ToLookup(
    item => item.Id,
    item => item.Value);
ILookup lookupTable=itemswithidentiers.ToLookup(
item=>item.Id,
item=>item.Value);
要访问原始j_1的结果,请执行以下操作:

IEnumeable<Item> j_1Result = lookupTable["J1"];
IEnumable j_1Result=lookupTable[“J1”];

如果您使用int作为标识符,则此代码可以稍微优化。

谢谢,我知道如何执行此操作,但我想扩展我的好奇心,以便在一个任务中查询多个内容。非常感谢,它非常清晰
IEnumeable<Item> j_1Result = lookupTable["J1"];