Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如何在Linq中使用字符串数组All运算符_C#_Linq - Fatal编程技术网

C# 如何在Linq中使用字符串数组All运算符

C# 如何在Linq中使用字符串数组All运算符,c#,linq,C#,Linq,我的质询如下: string[] keys = txtSearch.Text.Split(' '); var query = (from m in db.Messages join r in db.Recievers on m.Id equals r.Message_Id where (keys.All(k => (m.MessageText + m.Comments.Select(cmt => cmt.CommentText).

我的质询如下:

string[] keys = txtSearch.Text.Split(' ');

var query = (from m in db.Messages
             join r in db.Recievers on m.Id equals r.Message_Id
             where (keys.All(k => (m.MessageText + m.Comments.Select(cmt => cmt.CommentText).ToString()).Contains(k)))
             select m.Id).Distinct();
我得到以下错误:

本地序列不能用于查询的LINQ到SQL实现 除Contains()运算符之外的运算符


使用本地集合时,只能在linq to SQL查询中使用
Array.Contains()


您需要根据此规则更改查询。

在使用本地集合时,只能在linq to SQL查询中使用
Array.Contains()


您需要根据此规则更改查询。

运算符
All
返回一个布尔值,它还确定是否所有元素都满足一个条件。在枚举时,只要不满足条件,枚举就会停止并返回true或false

我相信您期望的是
功能,其中
返回所有满足搜索匹配条件的指定元素


我认为您没有正确地使用查询。

运算符
All
返回一个布尔值,它还确定所有元素是否满足一个条件。在枚举时,只要不满足条件,枚举就会停止并返回true或false

我相信您期望的是
功能,其中
返回所有满足搜索匹配条件的指定元素


我认为您没有正确地使用查询。

问题是您的查询无法转换为SQL(或者至少提供程序没有编程这样做)。如果事实上我不知道该查询在SQL中会是什么样子:“给我所有这些关键字都包含在文本或注释中的消息”

我的第一个想法是处理多个请求,每个键值对应一个请求:

List<int> allIDs = new List<int>();
foreach(string key in keys)
{
    var query = (from m in db.Messages
                 join r in db.Recievers on m.Id equals r.Message_Id
                 where m.MessageText.Contains(key) || m.Comments.Any(cmt => cmt.CommentText.Contains(key)
                 select m.Id).Distinct();
    allIds.AddRange(query);
}
List allIDs=new List();
foreach(字符串键入键)
{
var query=(从db.Messages中的m开始)
在数据库中加入r。m.Id上的接收器等于r.Message\u Id
其中m.MessageText.Contains(键)| m.Comments.Any(cmt=>cmt.CommentText.Contains(键)
选择m.Id).Distinct();
allIds.AddRange(查询);
}
但您甚至可能需要在单独的查询中搜索消息和注释


显然,您更愿意在一个查询中完成这项工作,但我不知道如何在SQL中不使用游标就可以完成这项工作。如果您可以生成一个SQL语句来提供正确的结果,那么直接调用该SQL语句可能比尝试生成一个编译为等效SQL的Linq语句更容易。

问题在于,您的查询无法转换为SQL(或者至少提供商没有这样做的程序)。如果事实上我不知道该查询在SQL中会是什么样子:“给我所有消息,其中所有这些关键字都包含在文本或注释中”

我的第一个想法是处理多个请求,每个键值对应一个请求:

List<int> allIDs = new List<int>();
foreach(string key in keys)
{
    var query = (from m in db.Messages
                 join r in db.Recievers on m.Id equals r.Message_Id
                 where m.MessageText.Contains(key) || m.Comments.Any(cmt => cmt.CommentText.Contains(key)
                 select m.Id).Distinct();
    allIds.AddRange(query);
}
List allIDs=new List();
foreach(字符串键入键)
{
var query=(从db.Messages中的m开始)
在数据库中加入r。m.Id上的接收器等于r.Message\u Id
其中m.MessageText.Contains(键)| m.Comments.Any(cmt=>cmt.CommentText.Contains(键)
选择m.Id).Distinct();
allIds.AddRange(查询);
}
但您甚至可能需要在单独的查询中搜索消息和注释


显然,您更愿意在一个查询中完成这项工作,但我不知道如何在SQL中不使用游标就可以完成这项工作。如果您可以生成一个SQL语句来提供正确的结果,那么直接调用该SQL语句可能比尝试生成一个编译为等效SQL的Linq语句更容易。

似乎您不能将本地源字符串[]键与db源一起使用,因为where子句u正在使用本地源。使用linq作为select*从本地\u源进行翻译,然后try@Prathyush附带问题:您希望从
Select(cmt=>cmt.CommentText).ToString()中得到什么
?@IvanStoev,我希望所有注释都连接在一起。如果您希望使用concated值,则您的查询不正确,因为Greg也建议使用相同的值。似乎您不能使用本地源字符串[]where子句u中db source为的键使用的是本地源。使用linq作为select*from local_source进行翻译,然后try@Prathyush附带问题:您希望从
Select(cmt=>cmt.CommentText).ToString()中得到什么
?@IvanStoev,我希望所有注释都连接在一起。如果您希望的是concated值,那么您的查询是不正确的,因为Greg也提出了同样的建议。