gpt4 book ai didi

c# - LINQ - 字符串包含数组中的任何元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:03 24 4
gpt4 key购买 nike

我有以下代码块:

string[] searchTerms = Request.QueryString["search"].Split(' ');
var searchResults = from i in Website.Images
join u in Website.Users on i.User_Id equals u.Id
where i.ImageTitle == searchTerms.Any()

searchTerms 将包含多个单词,例如 foo barbaz。我想检查 i.ImageTitle 以查看它是否包含这些词中的任何一个。所以:

足球球将被归还

bar 将返回

沐浴恕不退还

我确定我必须使用 .Any 和可能的 .Contains,但我不确定如何配置它们。

最佳答案

首先想到的是:

var searchResults = from i in Website.Images
join u in Website.Users on i.User_Id equals u.Id
where searchTerms.Any(
term => i.imageTitle.Contains(term))
select i;

但是,这并不完全正确,因为您会得到一个错误:

Exception information: Exception type: System.NotSupportedException Exception message: Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator.

发生这种情况是因为 searchTerms 数组无法转换为 SQL 构造。

通常的解决方法是使用 PredicateBuilder从多个搜索词创建谓词,然后在最终查询中使用它:

var predicate = PredicateBuilder.False<YourImageType>();
foreach(string searchTerm in searchTerms)
predicate = predicate.Or(image =>
image.imageTitle.Contains(searchTerm));

var searchResults = from i in Website.Images.Where(predicate)
join u in Website.Users on i.User_Id equals u.Id
select i;

关于c# - LINQ - 字符串包含数组中的任何元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583976/

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