文档章节

使用LINQ来获取一个List <>中的项目,而不是另一个List <>中的项目

 技术盛宴
发布于 01/18 19:29
字数 602
阅读 11
收藏 0

我会假设有一个简单的LINQ查询可以做到这一点,但我不确定该如何做。

给出这段代码:

class Program
{
    static void Main(string[] args)
    {
        List<Person> peopleList1 = new List<Person>();
        peopleList1.Add(new Person() { ID = 1 });
        peopleList1.Add(new Person() { ID = 2 });
        peopleList1.Add(new Person() { ID = 3 });

        List<Person> peopleList2 = new List<Person>();
        peopleList2.Add(new Person() { ID = 1 });
        peopleList2.Add(new Person() { ID = 2 });
        peopleList2.Add(new Person() { ID = 3 });
        peopleList2.Add(new Person() { ID = 4 });
        peopleList2.Add(new Person() { ID = 5 });
    }
}

class Person
{
    public int ID { get; set; }
}

我想执行LINQ查询,以便给我在peopleList2中不在peopleList1

这个例子应该给我两个人(ID = 4&ID = 5)


#1楼

这是一个工作示例,可以获取应聘者尚不具备的IT技能。

//Get a list of skills from the Skill table
IEnumerable<Skill> skillenum = skillrepository.Skill;
//Get a list of skills the candidate has                   
IEnumerable<CandSkill> candskillenum = candskillrepository.CandSkill
       .Where(p => p.Candidate_ID == Candidate_ID);             
//Using the enum lists with LINQ filter out the skills not in the candidate skill list
IEnumerable<Skill> skillenumresult = skillenum.Where(p => !candskillenum.Any(p2 => p2.Skill_ID == p.Skill_ID));
//Assign the selectable list to a viewBag
ViewBag.SelSkills = new SelectList(skillenumresult, "Skill_ID", "Skill_Name", 1);

#2楼

或者,如果您不加任何否定地想要它:

var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));

基本上说是从peopleList2获取全部信息,其中peopleList1中的所有ID与peoplesList2中的ID不同。

与接受的答案略有不同:)


#3楼

参加聚会有点晚,但与SQL兼容的Linq一个好的解决方案是:

List<string> list1 = new List<string>() { "1", "2", "3" };
List<string> list2 = new List<string>() { "2", "4" };

List<string> inList1ButNotList2 = (from o in list1
                                   join p in list2 on o equals p into t
                                   from od in t.DefaultIfEmpty()
                                   where od == null
                                   select o).ToList<string>();

List<string> inList2ButNotList1 = (from o in list2
                                   join p in list1 on o equals p into t
                                   from od in t.DefaultIfEmpty()
                                   where od == null
                                   select o).ToList<string>();

List<string> inBoth = (from o in list1
                       join p in list2 on o equals p into t
                       from od in t.DefaultIfEmpty()
                       where od != null
                       select od).ToList<string>();

感谢http://www.dotnet-tricks.com/Tutorial/linq/UXPF181012-SQL-Joins-with-C


#4楼

此Enumerable Extension可让您定义要排除的项目列表以及用于查找用于执行比较的键的函数。

public static class EnumerableExtensions
{
    public static IEnumerable<TSource> Exclude<TSource, TKey>(this IEnumerable<TSource> source,
    IEnumerable<TSource> exclude, Func<TSource, TKey> keySelector)
    {
       var excludedSet = new HashSet<TKey>(exclude.Select(keySelector));
       return source.Where(item => !excludedSet.Contains(keySelector(item)));
    }
}

你可以这样使用

list1.Exclude(list2, i => i.ID);

#5楼

var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));

本文转载自:https://stackoom.com/question/GYDr/使用LINQ来获取一个List-lt-gt-中的项目-而不是另一个List-lt-gt-中的项目

粉丝 0
博文 1097
码字总数 0
作品 0
深圳
高级程序员
私信 提问
加载中

评论(0)

LINQ标准查询操作符

1.投影操作符:将序列中的元素转换为一个由开发人员定义的形式的操作。 Select :对单个序列或集合中的值进行投影。 string[] Devices = { "电视", "电冰箱", "洗衣机", "电话", "微波炉" }......

技术小甜
2017/11/16
0
0
Linux Shell脚本语法扫盲 及 Jenkins通过shell构建个人思路

前言 本篇文章 承接我的上一篇文章 通过jenkins持续集成 github中的代码到服务器 在上一篇文章中我们已经安装好了Jenkins,并且为其注入了灵(dai)魂(ma)。当我们使用git进行push操作的时...

卡杰
2018/05/24
0
0
Android HTML & XML 转义字符

Android HTML & XML 转义字符 HTML中<, >,&等有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用。使用这三个字符时,应使用它们的转义序列,如下所示: 前者为字符转义序列,后...

假装是大神
2012/03/19
3.2K
0
J2EE复习(一)HTML

HTML(Hypertext Markup Language) 简介 HTML 是一种标记语言 使用 HTML 标记和元素,可以: 控制页面和内容的外观 发布联机文档 使用 HTML 文档中插入的链接检索联机信息 创建联机表单,收集...

xlc8859
2009/04/07
107
0
AngularJS 中的一些坑

本文由伯乐在线 -蔡蔡 翻译。未经许可,禁止转载! 英文出处:branchandbound。欢迎加入翻译组。 最近几个月频繁的跟AngularJS打交道,对于web应用开发来说Angular真的是一个神奇的框架,但是...

伯乐在线
2013/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何获得元素的渲染高度?

如何获得元素的渲染高度? 假设您有一个<div>元素,其中包含一些内容。 内部的内容将扩展<div>的高度。 当您没有明确设置高度时,如何获得“渲染的”高度。 显然,我尝试过: var h = docume...

技术盛宴
35分钟前
40
0
zookeeper宕机与dubbo直连

加入zookeeper宕机后,一段时间内consumer依然能够获取provider的服务,实际上使用了本地缓存进行通讯,这也是dubbo健壮性的一种体验。 dubbo健壮性的表现: 1.监控中心宕机,不影响使用,只...

七宝1
36分钟前
44
0
一分钟了解【X-Frame-Options设置】

含义 通过设置X-Frame-Options来控制网页能否被frame或iframe嵌入。 目的 防止出现 点击劫持 :攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在...

crazymus
42分钟前
48
0
如何在JDBC中获取插入ID?

我想使用Java中的JDBC在数据库(在我的情况下为Microsoft SQL Server)中INSERT一条记录。 同时,我想获取插入ID。 如何使用JDBC API实现此目的? #1楼 我正在使用SQLServer 2008,但是我有一...

javail
50分钟前
58
0
【小程序_01】小程序概述

一、小程序简介 1. 什么是小程序 小程序是一种不需要下载、安装即可使用的应用,它实现了触手可及的梦想,用户扫一扫或者搜一下就能打开应用,也实现了用完即走的理念,用户不用安装太多应用...

Demo_Null
56分钟前
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部