C# Linq查询返回与数组中所有字匹配的行
我需要使用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
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,只有雷诺,但没有克里奥。现在的问题是。。数据是否正确,但匹配逻辑是否错误,或者逻辑是否正确,但数据是否错误?每个关键字都有与其相关的所有关键字搜索。关键字“雷诺克利奥”将有关键字搜索“雷诺”和“克利奥”,或者如果我有