【问题标题】:Remove Matching List(of Object) from Another List(of Object) using LINQ使用 LINQ 从另一个(对象)列表中删除匹配列表(对象)
【发布时间】:2013-02-10 13:13:28
【问题描述】:

我很难弄清楚如何完成问题标题中列出的任务。

基本上,我有一个“News”对象列表,定义为:

Dim news_list As List(Of News) = myNamespcae.News.ListNews()

根据条件,我有另一个“新闻”对象列表;

Dim news_headlines As List(Of News) = myNamespace.News.getHeadlines()

然后,我再次将“点”作为列表(新闻)作为;

Dim spots = (From n In news_list Take (10) Select n)

我正在努力完成; 如果 news_headlines 不为空,如果点中存在任何 news_headlines 新闻对象,则将其从点中删除。返回过滤的斑点。

任何指导将不胜感激..

谢谢。

【问题讨论】:

    标签: asp.net vb.net linq


    【解决方案1】:

    如果你想从Spots 中选择十个然后过滤掉news_headlines 中的那些,它会是这样的(警告:VB 中的 LINQ 语法完全来自内存):

    Dim spots1 = (From n In news_list Take (10) Select n)
    Dim spots2 = (From n in spots1 Where Not news_headlines.Contains(n) Select n)
    

    如果你想过滤掉news_headlines中的那些,然后选择十个,它会是这样的:

    Dim spots1 = (From n In news_list Where Not news_headlines.Contains(n) Select n)
    Dim spots2 = (From n in spots1 Take (10) select n)
    

    您当然可以组合这两个查询。请注意,我假设 news_headlines 不为空。我还假设您的新闻项目是相同的对象实例或实现 IEquatable<T>

    【讨论】:

    • 谢谢你,安,我想删除所有 news_headlines 并将它们从 news_list 中删除
    • @Emin 所以你想改变news_list的内容?或者只是从以spots 结尾的内容中排除news_headlines 的内容?
    • 好吧,看来我造成了混乱。基本上,news_list 和 news_headlines 都是 List(of MyNewsObject),所以它们的类型相同。我想要的是创建另一个列表,该列表将包含 news_list 中的所有项目,不包括 news_headlines 中的项目......所以把点想象成; spot = news_list - news_headlines
    • 我认为我的第二个代码 sn-p 应该做你想做的事(当必要的语法更正时!)
    • L 我无法让您的代码正常工作。这就是我的工作方式: Dim ids = New HashSet(Of Integer)(news_headlines.Select(Function(x) x.NewsID)) If ids.Count > 0 Then spot = news_list.Where(Function(x) Not ids .Contains(x.NewsID)).Take(10) End If 但是我不明白为什么你的代码没有给我想要的结果。
    【解决方案2】:

    我认为*中也有类似的问题。无论如何,您可以使用"Intersect" 获取同时出现在广告位和标题中的元素,并将它们从广告位列表中删除。

    代码应该很简单,但我有一段时间没有使用 VB.net,抱歉。

    【讨论】: