gpt4 book ai didi

c# - LINQ 包含来自字符串数组的一个匹配项

转载 作者:太空狗 更新时间:2023-10-29 17:47:04 24 4
gpt4 key购买 nike

无法让它工作:

    /// <summary>
/// Retrieve search suggestions from previous searches
/// </summary>
public static string[] getSearchSuggestions(int SectionID, string Query)
{
string[] Suggestions;
string[] Words = Query.Split(' ');

using (MainContext db = new MainContext())
{
Suggestions = (from c in db.tblSearches
where c.SectionID == SectionID &&
Words.Any(w => c.Term.Contains(w))
select c.Term).ToArray();
}

return Suggestions;
}

我得到:

System.NotSupportedException: Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.

我想返回字段 c.Term 包含 Words 数组中的任何单词的记录。我也想按比赛总数排序,但这似乎很难做到!我找到了 this MSDN .但我也无法让它与我的查询一起使用。还有 found this but it's not working .

最佳答案

好的,在深入研究之后,我意识到问题不在于 Any 或 Contains。 Linq to SQL 不喜欢您将本地序列(单词)与 SQL 集合 (db.tblSearches) 组合在一起。因此,为了实现这一点,您必须将其分解为 2 个单独的查询。

public static string[] getSearchSuggestions(int SectionID, string Query)
{
string[] Suggestions;
string[] Words = Query.Split(' ');

using (MainContext db = new MainContext())
{
string[] all = (from c in db.tblSearches
where c.SectionID == SectionID
select c.Term).ToArray();

Suggestions = (from a in all
from w in Words
where a.Contains(w)
select a).Distinct().ToArray();


}

return Suggestions;
}

请记住,在第二个查询中,Contains 是区分大小写的,因此您可能必须添加不区分大小写的扩展方法,或者去老学校踢他们 .ToUpper ()。我在我的一个上下文中以 4.0 运行它,它正确地返回了所有 88 个字符串(可能是 9814 个)。虽然这是一个彻底的皮塔饼。对这个问题肯定+1。

编辑:在最终答案中添加了 .Distinct()

关于c# - LINQ 包含来自字符串数组的一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7364699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com