Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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查询返回与数组中所有字匹配的行_C#_Asp.net Mvc_Linq - Fatal编程技术网

C# Linq查询返回与数组中所有字匹配的行

C# Linq查询返回与数组中所有字匹配的行,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我需要使用linq构建一个查询,以返回与数组中所有单词匹配的行: 示例数组(拆分关键字): 关键字搜索表: public class KeywordSearch { // Primary properties public int Id { get; set; } public string Name { get; set; } public Keyword Keyword { get; set; } } 此表包含以下记录: Id: 1 Name: "RENAU

我需要使用linq构建一个查询,以返回与数组中所有单词匹配的行:

示例数组(拆分关键字):

关键字搜索表:

public class KeywordSearch
{
    // Primary properties
    public int Id { get; set; }
    public string Name { get; set; }
    public Keyword Keyword { get; set; }
}
此表包含以下记录:

Id: 1
Name: "RENAULT"
Keyword_Id: 3503

Id: 2
Name: "CLIO"
Keyword_Id: 3503
我想获得与数组中所有单词匹配的所有
关键字\u Id
s

到目前为止,我已经:

编辑:

var keywordSearchQuery = _keywordSearchRepository.Query;

var keywordIds = from k in keywordSearchQuery
                        where splitKeywords.All(word => word.Equals((k.Name)))
                        select k.Keyword.Id;
但它不起作用。有什么想法吗


谢谢

这将遍历您的数组并找到每个元素的匹配键,如果这是您要查找的

var ids splitKeywords.Select(k => keywordSearchQuery.Single(q => q.Name == k).Id).ToArray();

如果名称不唯一或不确定是否匹配,则必须进行更多验证。

这将遍历数组并找到每个元素的匹配键,如果这是您要查找的

var ids splitKeywords.Select(k => keywordSearchQuery.Single(q => q.Name == k).Id).ToArray();

如果名称不唯一或不确定是否匹配,则必须进行更多验证。

首先,需要将具有相同关键字.Id的所有记录合并到单个记录中。使用GroupBy进行此操作。
将它们分组后,可以筛选出组(关键字ID),其中所有项(单个记录、名称)至少与一个关键字不匹配

Original-检查所有名称值是否与splitKeyWords中的值匹配

var results = keywordSearchQuery
                .GroupBy(k => k.Keyword_Id)
                .Where(g => g.All(k => splitKeyWords.Any(w => w.Equals(k.Name))))
                .Select(g => g.Key);
已更新-检查splitKeyWords中的所有值是否与名称匹配

var results = keywordSearchQuery
                .GroupBy(k => k.Keyword_Id)
                .Where(g => splitKeyWords.All(w => g.Any(k => w.Equals(k.Name))))
                .Select(g => g.Key);

请注意,如果您有一个名为RENAULT、CLIO和ASDF的关键字.Id,它将匹配。

首先,您需要将具有相同关键字.Id的所有记录合并到一个记录中。使用GroupBy进行此操作。
将它们分组后,可以筛选出组(关键字ID),其中所有项(单个记录、名称)至少与一个关键字不匹配

Original-检查所有名称值是否与splitKeyWords中的值匹配

var results = keywordSearchQuery
                .GroupBy(k => k.Keyword_Id)
                .Where(g => g.All(k => splitKeyWords.Any(w => w.Equals(k.Name))))
                .Select(g => g.Key);
已更新-检查splitKeyWords中的所有值是否与名称匹配

var results = keywordSearchQuery
                .GroupBy(k => k.Keyword_Id)
                .Where(g => splitKeyWords.All(w => g.Any(k => w.Equals(k.Name))))
                .Select(g => g.Key);


请注意,如果您有一个名为RENAULT、CLIO和ASDF的关键字.Id,它将匹配。

什么是
keywordSearchQuery
splitKeywords
;什么不起作用?你的意思是你想找到数组中每个元素的id吗?不确定你到底在找什么:你的意思是你想从表中得到一个项目列表,这些项目与数组中的任何关键字“splitKeywords”匹配吗如果是这种情况,您的查询应该是keywordSearchQuery中k的
,其中splitKeywords.Contains(k.Name)
您当前使用.All的查询永远不会工作,因为您正在为keywordSearchQuery数组中的所有字符串指定一个必须为true的条件,谢谢。我想获得与splitKeywords中的所有字符串相匹配的所有关键字,splitKeywords是由拆分(“”)构建的字符串数组。要搜索的相关单词在KeywordSearchs表中,我需要找到所有匹配的关键字。ok。我认为cadrell0给出的下面的答案是正确的,那么什么是
keywordSearchQuery
splitKeywords
;什么不起作用?你的意思是你想找到数组中每个元素的id吗?不确定你到底在找什么:你的意思是你想从表中得到一个项目列表,这些项目与数组中的任何关键字“splitKeywords”匹配吗如果是这种情况,您的查询应该是keywordSearchQuery中k的
,其中splitKeywords.Contains(k.Name)
您当前使用.All的查询永远不会工作,因为您正在为keywordSearchQuery数组中的所有字符串指定一个必须为true的条件,谢谢。我想获得与splitKeywords中的所有字符串相匹配的所有关键字,splitKeywords是由拆分(“”)构建的字符串数组。要搜索的相关单词在KeywordSearchs表中,我需要找到所有匹配的关键字。ok。我认为cadrell0下面给出的答案是正确的,谢谢。我在选择部分下面加了下划线,标题是“bool不包含选择的定义”,知道吗?我错过了一个结束参数。前一行应该还有一个。我会更新答案它会返回一个匹配雷诺和克里奥的关键词,但它也会返回一个只匹配雷诺的关键词,知道为什么会发生这种情况吗?我不得不用GroupBy(k=>k.Keyword.Id)来改变你的GroupBy(k=>k.Keyword.Id)我假设这是因为你的数据看起来像{Id:1,名字:“雷诺”,关键字Id:3503}{Id:2,名字:“克里奥”,关键字Id:3503}{Id:3,名字:“雷诺”,关键字Id:4604}。。。。ie有一个关键字id,只有雷诺,但没有克里奥。现在的问题是。。数据是否正确,但匹配逻辑是否错误,或者逻辑是否正确,但数据是否错误?每个关键字都有与其相关的所有关键字搜索。关键字“雷诺克里奥”将有关键字搜索“雷诺”和“克里奥”,或者如果我有关键字“雷诺里斯本”,我将有关键字搜索“雷诺”和“里斯本”。我可以有多个“雷诺”关键字搜索,但它们都与不同的关键字相关。谢谢。我在选择部分下面加了下划线,标题是“bool不包含选择的定义”,知道吗?我错过了一个结束参数。前一行应该还有一个。我会更新答案它会返回一个匹配雷诺和克里奥的关键词,但它也会返回一个只匹配雷诺的关键词,知道为什么会发生这种情况吗?我不得不用GroupBy(k=>k.Keyword.Id)来改变你的GroupBy(k=>k.Keyword.Id)我假设这是因为你的数据看起来像{Id:1,名字:“雷诺”,关键字Id:3503}{Id:2,名字:“克里奥”,关键字Id:3503}{Id:3,名字:“雷诺”,关键字Id:4604}。。。。ie有一个关键字id,只有雷诺,但没有克里奥。现在的问题是。。数据是否正确,但匹配逻辑是否错误,或者逻辑是否正确,但数据是否错误?每个关键字都有与其相关的所有关键字搜索。关键字“雷诺克利奥”将有关键字搜索“雷诺”和“克利奥”,或者如果我有