首页 > 解决方案 > 必须将数据保存在列表数组[]中。首先检查两个列表数组与它们相交并给出剩余的值

问题描述

var data = db.User_Register_Events.Where(x => x.UserTable.User_id == "Rehman").Select(x => x.EventTable.Slot.Slot_Id).ToList();           

var data2 = db.User_Register_Events.Where(x => x.UserTable.User_id == "Muhammad").Select(x => x.EventTable.Slot.Slot_Id).ToList();

List<int> data3 = data.Concat(data2).ToList();
List<Slot> AllSlots = db.Slots.Where(x => x.Slot_Id > 1).ToList();

我应该写什么查询来首先比较 in ( data3) 和 ( AllSlots),然后将不匹配的值从AllSlotsArray List 视图传递?

我试过这个,但这不是一个有效的解决方案:

List<string> intersect = AllSlots.Except(data3).ToAray();


查看具有数据的变量数据(例如,11、12、13、24、55),这些基本上是您在数据库模式中看到的插槽 ID。第二个变量data2存储(11,33,52,13,23)

data 和 data2 都存储在列表中:

List<int> data3 = data.Concat(data2).ToList();

还有一个存储所有(“SLOT ID”)的列表:

(11,12,13,14,15,16,21,22,23,24,25,26.............51,52,53,53,55,56)

List<Slot> AllSlots = db.Slots.Where(x => x.Slot_Id > 1).ToList();

我想要的是......我必须处理(“data3”)和(“AllSlots”)

我必须检查/打印(“AllSlots”)列表中的所有值,除了 data3 值......

标签: c#asp.net-mvclist

解决方案


从您的编辑来看,现在看起来像您想要的那样:

allSlots.Except(data1.Union(data2));

如果抱怨因为 allslots 存储 Slot 对象并且data1.Union(data2)是整数列表而无法正常工作,则可以执行以下操作:

allSlots.Where(s => !data1.Contains(s.Slot_Id) && !data2.Contains(s.Slot_Id));

你不需要数据3。如果你在 allSlots、data1 或 data2 中有数千个东西,那么使用 HashSet 来包含的性能会更好,但对于每个条目中的一些低几十个条目就足够了


推荐阅读