[英]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();
您可以尝试使用.Except()
https://msdn.microsoft.com/zh-CN/library/vstudio/bb336390(v=vs.100).aspx 。
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.