繁体   English   中英

从一个列表中删除另一个列表中存在的项目

[英]Remove items from one list that exist on another list

我有以下实体:

public class Media {
  public Int32 SourceId { get; set; }
  public String Key { get; set; } 
}

我有dbContext.Medias和媒体列表:

List<Media> medias = apiService.GetMedias(10);

我需要删除dbContext.Medias中存在的介质中的所有项目,当SourceId && Key相等时,其中两个项目相等。 所以我有:

medias = medias.Where(x => !dbContext.Medias.Any(y => y.Key == x.Id && y.SourceId == source.Id)).ToList();

问题是我要查询数据库多次。

我想“反转”解决方案,该解决方案将变为:

dbContext.Medias ...

关于如何执行此操作的任何想法?

string[] all = new string[]{"a", "b", "c", "d"}
string[] taken = new string[]{"a", "b"}
var remains = all.Except(taken);

您可以使用以下方法:

List<Media> result = all.Except<Media>(taken).ToList<Media>();

参考: 从另一阵列中删除一个阵列的最快方法是什么?

可能是这样的(不确定是否一切正确)

var mediasFromDB = dbContext.Medias.Where(x=>medias.Any(y => x.Key == y.Id && x.SourceId == source.Id);

medias = medias.Where(x => !mediasFromDB.Any(y => y.Key == x.Id && y.SourceId == source.Id)).ToList();
List<String> media = new List<String> { "a", "b", "c" };
List<String> dbContext = new List<String> { "c", "d", "e" };

var resultset = dbContext.SelectMany(x => media.Where(y => y == x)).ToList(); //Distinct possible here if theres duplicate data ..
media = media.Where(e => resultset.All(r2 => e != r2)).ToList();

var res = media; // "a" , "b"
var resl = resultset; // "c"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM