如果 T2 是 T1 属性之一,如何检查 <T1> 的集合是不是包含 <T2> 的集合?
Posted
技术标签:
【中文标题】如果 T2 是 T1 属性之一,如何检查 <T1> 的集合是不是包含 <T2> 的集合?【英文标题】:How to check whether a collection of <T1> contains collection of <T2> if T2 is one of T1 property?如果 T2 是 T1 属性之一,如何检查 <T1> 的集合是否包含 <T2> 的集合? 【发布时间】:2017-10-31 06:54:05 【问题描述】:我有一个本地 ID 列表,我需要检查 DB.Table
中是否存在此 ID。
我写了以下代码:
List<int> localIdList;
//filling localIdList
var idArrayFromDb = DB.Table
.Select(s => s.ID)
.ToArray();
bool isSubset = !localIdList
.Except(idListFromDb)
.Any();
目前它运作良好,但我认为这不是解决此问题的最佳方法。
所以我想知道,如果不从 DB 收集 Id 集合或其他更好的方法,我可以这样做吗?
【问题讨论】:
【参考方案1】:一种方法是使用 List 的 Contain() 方法。
bool isSubset = DB.Table.Where(s => localIdList.Contains(s)).Any();
@CodeCaster 1 提到的一个drawback 是它会受到localIdList 长度的限制。
【讨论】:
这是否有效取决于 ID 列表的大小。 SQL Server 对可以在 IN() 子句中使用的值的数量有限制。此外,“尝试”不是答案,请解释您的代码在做什么。【参考方案2】:试试这个
//sample
List<int> t1 = new List<int>();
t1.Add(1);
t1.Add(2);
t1.Add(3);
List<int> t2 = new List<int>();
t2.Add(2);
bool res = t2.Any(a => t1.Any(b => b == a));
Console.WriteLine("res :" + res);
// your solution here
bool isSubset = DB.Table.Any(s => localIdList.any(l=> l == s.ID));
【讨论】:
以上是关于如果 T2 是 T1 属性之一,如何检查 <T1> 的集合是不是包含 <T2> 的集合?的主要内容,如果未能解决你的问题,请参考以下文章