C# 在单查询(LINQ)C中输出多个列表#
嗨,我正在寻找一种方法来阅读一次列表输出3个不同的列表 例如: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_
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"];