当前位置: 首页 > 面试题库 >

LINQ to SQL-选择字符串数组之类的文本

拓拔麒
2023-03-14
问题内容

我有一个<string变量计数的列表>,我想查询(通过LINQ)一个表以查找包含“文本”列中任何这些字符串的任何项目。

尝试过此操作(无效):

items = from dbt in database.Items
         where (stringList.FindAll(s => dbt.Text.Contains(s)).Count > 0)
         select dbt;

查询将类似于:

select * from items where text like '%string1%' or text like '%string2%'

这可能吗?


问题答案:

查看本文以执行所需的操作:
http :
//www.albahari.com/nutshell/predicatebuilder.aspx

这就像梦一样。我实质上是剪切并粘贴了他们的代码,然后将其取回来(当然是用我自己的数据方案):

SELECT [t0].[Id], [t0].[DateCreated], [t0].[Name] ...
FROM [dbo].[Companies] AS [t0]
WHERE ([t0].[Name] LIKE @p0) OR ([t0].[Name] LIKE @p1)

这是我为概念验证而运行的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;

namespace PredicateTest
{
class Program
{
    static void Main(string[] args)
    {
        DataClasses1DataContext dataContext = new DataClasses1DataContext();

        Program p = new Program();
        Program.SearchCompanies("test", "test2");
        var pr = from pi in  dataContext.Companies.Where(Program.SearchCompanies("test", "test2")) select pi;
    }

    DataClasses1DataContext dataContext = new DataClasses1DataContext();

    public static Expression<Func<Company, bool>> SearchCompanies(
                                                  params string[] keywords)
    {
        var predicate = PredicateBuilder.False<Company>();
        foreach (string keyword in keywords)
        {
            string temp = keyword;
            predicate = predicate.Or(p => p.Name.Contains(temp));
        }
        return predicate;
    }

}

public static class PredicateBuilder
{
    public static Expression<Func<T, bool>> True<T>() { return f => true; }
    public static Expression<Func<T, bool>> False<T>() { return f => false; }

    public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
                                                        Expression<Func<T, bool>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>
              (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
    }

    public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
                                                         Expression<Func<T, bool>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>
              (Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
    }
}
}

我建议去该网站获取代码和解释。

(我留下第一个答案,因为如果您需要一个IN语句,它会很好地工作)



 类似资料:
  • 问题内容: 这些声明之间有何不同? 每种情况下的内存分配如何? 问题答案: 要更正编译错误,请使用以下语句之一替换 下一节将以上陈述相互比较 字符串常量 “ MY PROFESSION”是一个常量,并存储在String池中 是不可变的,即完整的内容无法修改。 字符串的大小/长度是固定的(无法附加) 字符数组 保存String的基础数组的副本(通过)并存储在堆空间中 通过加载单个字符常量在堆栈框架中

  • 本文向大家介绍字符数组和字符串之间的区别,包括了字符数组和字符串之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解字符数组和字符串之间的区别。 字符串 他们是不可变的。 一旦它们被定义,就不能被更改。 它指的是一个字符序列,表示为单个数据类型。 它包含了substring()、charAt()等内置函数。 可以使用' + '操作符将字符串追加到一起,从而形成一个新的字符串。

  • 这些声明有什么不同? 每种情况下的内存分配情况如何?

  • 问题内容: 我发现了这种奇怪的行为,并且为此感到震惊……有人有什么想法吗? Oracle 10g:我有两个不同的表,都具有名为“ TESTCOL ”的列,作为 Varchar2 (10) ,不能为空。 如果我对 table1 执行此查询,则会得到正确的结果: 请注意 ,我不是专门放置“ 1234” …不是错字,而是动态生成的查询,因此我将尽量不进行更改(至少在不久的将来不会更改)。 但是,如果我在

  • 问题内容: 我有这样的桌子 我想写一个选择查询,这样我就可以得到这样的结果 在这里,我需要按ID和数量总和进行分组,并用相同的ID和Differentnet名称连接字符串名称 问题答案: 这将与sql-server 2008一起使用

  • 问题内容: 目标是用数字表示的char值替换SQL查询中返回的整数值。例如: 标记为“端口”的表属性定义为1-4之间的整数。1 =篮球,2 =曲棍球,等等。下面是数据库表,然后是所需的输出。 数据库表: 所需的输出: 将这些整数值转换为String值的最佳实践是什么?在传递给程序之前使用SQL转换值?使用脚本语言来更改程序中的值?更改数据库设计? 问题答案: 数据库应该保存这些值,并且您应该执行连