Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查一个字符数组是否包含另一个字符数组中的每个元素?_C#_.net_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

C# 如何检查一个字符数组是否包含另一个字符数组中的每个元素?

C# 如何检查一个字符数组是否包含另一个字符数组中的每个元素?,c#,.net,linq,entity-framework,linq-to-entities,C#,.net,Linq,Entity Framework,Linq To Entities,可能重复: 我试图确定是否有一种方法可以使用LINQ来查找子集数组中的每个元素是否都在超集数组中。例如,使用此超集: {'w','o','k','r','d','o'} 以下是有效的子集: {'o','k','w','r'} 虽然这些都是无效的: {'o','k','w','r','s'} {'w','o','k','r','d','o','s'} 实际的超集是我内存中的一个字符数组。实际子集是数据库表中的一个值。我尝试使用LINQ to EF从表中获取满足此条件的所有值。这就是我迄今为

可能重复:

我试图确定是否有一种方法可以使用LINQ来查找子集数组中的每个元素是否都在超集数组中。例如,使用此超集:

{'w','o','k','r','d','o'}
以下是有效的子集:

{'o','k','w','r'}
虽然这些都是无效的:

{'o','k','w','r','s'}
{'w','o','k','r','d','o','s'}
实际的超集是我内存中的一个字符数组。实际子集是数据库表中的一个值。我尝试使用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、字符串和Guid”) 这是上下文。”


有办法避免这个错误吗?有没有更简单的方法来完成我在这里尝试的工作?

LINQ为此类工作内置了诸如Exception和Intersect之类的扩展

char[] t1 = {'w','o','k','r','d','o'};

char[] t2 = {'o','k','w','r'};

bool isSubset = !t2.Except(t1).Any();
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

这个错误是因为查询,还是因为LINQ到EF?您正在查询哪些底层数据存储?它很可能不支持类似于
tocharray()
等的东西。如果单词来自数组,那么代码实际上可以正常工作。问题在于,试图将LINQ转换为适当的查询以使其无法处理诸如
tocharray()
之类的事情。要么你需要将整个单词列表拉入内存并在那里进行处理,要么实现一个更复杂的解决方案,就像我一周前回答的这个巧合相似的问题:这会抛出与我之前遇到的相同的错误。虽然干净多了…我这边没有错误。在
isSubset
阅读问题和评论部分填充true这会引发与我之前遇到的相同错误。不过要干净得多。。。