我正在尝试确定是否有办法使用LINQ来查找子集数组中的每个元素是否都在超集数组中。例如,使用此超集:
{'w','o','k','r','d','o'}
以下是有效的子集:
{'o','k','w','r'}
虽然这些无效:
{'o','k','w','r','s'}
{'w','o','k','r','d','o','s'}
实际的超集是我在内存中的char数组。实际子集是数据库表中的值。我正在尝试使用LINQ to EF从表中获取满足此条件的所有值。这是我到目前为止所尝试的:
char[] letterArray = letters.ToCharArray();
return we.Words.Where(t => letterArray.Join(t.Word.ToCharArray(),
f => f,
s => s, (f, s) => new { s }).Count() == t.Word.Length
).Select(t => t.Word).ToArray();
但是当我运行这个时,我得到错误:
'无法创建'System.Char'类型的常量值。只要 支持原始类型(例如Int32,String和Guid') 这个背景。'
有没有解决此错误的方法?有没有更简单的方法来做我在这里尝试的事情?
答案 0 :(得分:2)
char[] t1 = {'w','o','k','r','d','o'};
char[] t2 = {'o','k','w','r'};
bool isSubset = !t2.Except(t1).Any();
答案 1 :(得分:0)
LINQ内置了像Except和Intersect这样的扩展功能。
char[] superset = { 'w', 'o', 'k', 'r', 'd', 'o' };
char[] subset1 = { 'o', 'k', 'w', 'r' };
char[] subset2 = { 'w', 'o', 'k', 'r', 'd', 'o', 's' };
bool subValid1 = !subset1.Except(superset).Any(); //true
bool subValid2 = !subset2.Except(superset).Any(); //false