标签: where-clause

LINQ multiple where子句

我有一个课程表,我需要根据搜索框中输入的关键字进行搜索.这是一个示例查询:

SELECT * FROM Courses WHERE 
Title LIKE '%word%' OR Title LIKE '%excel%' OR 
Contents LIKE '%word%' OR Contents LIKE '%excel%'
Run Code Online (Sandbox Code Playgroud)

如何在LINQ中转换它,LINQ将根据每个关键字动态生成WHERE语句.

我尝试使用PredicateBuilder,只要字段为VARCHAR就可以正常工作.对于"TEXT"字段,不生成引号,从而导致编译器给出错误消息.这是PredicateBuilder生成的SQL

SELECT [t0].[CoursesID], [t0].[Title], [t0].[Contents], [t0].[Active], 
FROM [dbo].[Courses] AS [t0]
WHERE ([t0].[Title] LIKE '%word%') OR ([t0].[Contents] LIKE %word%) OR 
([t0].Title] LIKE '%excel%') OR ([t0].[Contents] LIKE %excel%)
Run Code Online (Sandbox Code Playgroud)

请注意,"内容"字段没有单引号,这是数据库中的文本字段.

有没有简单的方法来构建WHERE语句并使用查询附加它?有没有人知道如果没有PredicateBuilder我怎么能这样做?

提前致谢.

linq where-clause

11
推荐指数
1
解决办法
2万
查看次数

LINQ WHERE与OR

我使用LINQ来创建我的where子句,如下所示:

var query = from x in context.Xs
            select x;

if (y == ...)
{
    query = query.Where(x => x.Y == 1);
}
Run Code Online (Sandbox Code Playgroud)

我有很多这些"if .... where"语句.我遇到的问题是,所有这些都加入了使用AND的子句,但我需要所有where子句使用OR.是否有一种简单的方法将此代码移植到OR代码中?或者甚至用OR做出最简单的方法是什么?

谢谢.

c# linq where-clause

11
推荐指数
2
解决办法
9486
查看次数

如果在WHERE子句中,常量被参数替换(具有相同的值),为什么查询会大幅减慢?

我有一个递归查询,如果WHERE子句包含常量,则执行速度非常快,但如果我用具有相同值的参数替换常量,则会变得非常慢.

查询#1 - 使用常量

;WITH Hierarchy (Id, ParentId, Data, Depth)
AS
( SELECT Id, ParentId, NULL AS Data, 0 AS Depth
  FROM Test
  UNION ALL
  SELECT h.Id, t.ParentId, COALESCE(h.Data, t.Data), Depth + 1 AS Depth
  FROM Hierarchy h
       INNER JOIN Test t ON t.Id = h.ParentId
)
SELECT *
FROM Hierarchy
WHERE Id = 69
Run Code Online (Sandbox Code Playgroud)

查询#2 - 带参数

DECLARE @Id INT
SELECT @Id = 69

;WITH Hierarchy (Id, ParentId, Data, Depth)
AS
( SELECT Id, ParentId, NULL AS …
Run Code Online (Sandbox Code Playgroud)

sql where-clause sql-server-2008

11
推荐指数
1
解决办法
9311
查看次数

在WHERE子句中进行Postgres数组查找

我有一个问题:

SELECT bar, (SELECT name FROM names WHERE value = bar) as name
FROM foobar WHERE foo = 1 and bar = ANY (1,2,3)
Run Code Online (Sandbox Code Playgroud)

我的问题是,当表中没有包含任何行bar = 3(或者请求的任何其他值)时foobar,不会为该值的bar返回任何行.

我希望我的查询返回一行[bar, NULL],但是想不出办法来解决这个问题.

这甚至可能吗?

arrays postgresql where-clause

11
推荐指数
1
解决办法
3万
查看次数

Rails where子句超过两个表

我在rails应用程序中有以下模型

category => company => store
Run Code Online (Sandbox Code Playgroud)

商店有belongs_to公司,公司有belongs_to类别关系.现在我想在商店对象上使用where方法来检索同一类别中的所有商店.

我想要这样的东西

@stores.nearbys(5).where("stores.company.category_id = xxx")
Run Code Online (Sandbox Code Playgroud)

有人可以给我一个提示

ruby ruby-on-rails where-clause

11
推荐指数
2
解决办法
2万
查看次数

如果Linq where子句内的语句

今天苦苦挣扎.

我有以下方法返回产品列表..爱.

public static List<tblWeight> GetProductInfo(string memberid, string locationid, string basematerial, string source)
        {
             MyEntities getproductinfo = new MyEntities ();

            return (from p in getproductinfo .tblWeights
                        where    p.MemberId == memberid &&
                                 p.LocationId == locationid &&
                                 p.BaseMaterialName == basematerial &&
                                 p.WeightStatus == source
                       select p)
                       .ToList();
Run Code Online (Sandbox Code Playgroud)
  • basematerial和source是下拉列表.

如何将几个IF语句合并到where子句中?

例如,如果未触摸基础材料ddl但选择了源ddl中的项目,则结果将返回与基础材料关联但由所选源过滤的所有内容.

这甚至有意义吗?!

我甚至不确定我采取了正确的方法 - 请原谅我的无知.

linq if-statement where-clause

10
推荐指数
2
解决办法
2万
查看次数

转换为datetime仅在WHERE子句上失败?

我遇到了一些SQL服务器查询的问题.事实证明我有一个带有"Attibute_Name"和"Attibute_Value"字段的表,它可以是任何类型,存储在varchar中.(是的,我知道.)

特定属性的所有日期似乎都存储在"YYYY-MM-DD hh:mm:ss"格式中(不是100%确定,这里有数百万条记录),所以我可以毫无问题地执行此代码:

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_Name = 'SomeDate'
Run Code Online (Sandbox Code Playgroud)

但是,如果我执行以下代码:

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_Name = 'SomeDate'
    and CONVERT(DATETIME, pa.Attribute_Value) < GETDATE()
Run Code Online (Sandbox Code Playgroud)

我将收到以下错误: 从字符串转换日期和/或时间时转换失败.

怎么会在where子句上失败而不是在select子句上?

另一个线索:

如果不使用Attribute_Name进行过滤,而是使用存储在数据库(PK)中的实际Attribute_ID,它将正常工作.

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_ID = 15
    and CONVERT(DATETIME, pa.Attribute_Value) < GETDATE()
Run Code Online (Sandbox Code Playgroud)

更新 感谢大家的答案.我发现很难真正选择正确的答案,因为每个人都指出了一些对理解问题有用的东西.这绝对与执行的顺序有关.事实证明我的第一个查询正常工作,因为首先执行WHERE子句,然后执行SELECT.由于相同的原因,我的第二个查询失败(因为未过滤属性,执行相同的WHERE子句时转换失败).我的第三个查询是有效的,因为ID是索引(PK)的一部分,所以它优先,并且首先在该条件下钻取结果.

谢谢!

sql datetime where-clause sql-server-2008

10
推荐指数
2
解决办法
1万
查看次数

Postgres会将WHERE子句下推到带有Window函数(Aggregate)的VIEW吗?

Pg's Window函数的文档:

窗口函数考虑的行是由查询的FROM子句生成的"虚拟表",由WHERE,GROUP BY和HAVING子句过滤,如果有的话.例如,任何窗口函数都看不到因为它不符合WHERE条件而被删除的行.查询可以包含多个窗口函数,这些函数通过不同的OVER子句以不同的方式对数据进行分片,但它们都作用于此虚拟表定义的相同行集合.

但是,我没有看到这一点.在我看来,选择过滤器非常靠近左边距和顶部(最后完成的事情).

=# EXPLAIN SELECT * FROM chrome_nvd.view_options where fkey_style = 303451;
                                                      QUERY PLAN                                                      
----------------------------------------------------------------------------------------------------------------------
 Subquery Scan view_options  (cost=2098450.26..2142926.28 rows=14825 width=180)
   Filter: (view_options.fkey_style = 303451)
   ->  Sort  (cost=2098450.26..2105862.93 rows=2965068 width=189)
         Sort Key: o.sequence
         ->  WindowAgg  (cost=1446776.02..1506077.38 rows=2965068 width=189)
               ->  Sort  (cost=1446776.02..1454188.69 rows=2965068 width=189)
                     Sort Key: h.name, k.name
                     ->  WindowAgg  (cost=802514.45..854403.14 rows=2965068 width=189)
                           ->  Sort  (cost=802514.45..809927.12 rows=2965068 width=189)
                                 Sort Key: h.name
                                 ->  Hash Join  (cost=18.52..210141.57 rows=2965068 width=189)
                                       Hash Cond: (o.fkey_opt_header = h.id)
                                       -> …
Run Code Online (Sandbox Code Playgroud)

postgresql where-clause window-functions

10
推荐指数
1
解决办法
2259
查看次数

Linq to Entities中的动态where子句

我正在使用linq到实体(EF).我有一个构造函数,它接受4个字符串参数.根据什么参数不为null,我必须构建linq查询.我可以使用if else语句,但我也有其他10个参数的构造函数,在这种情况下,将有许多组合要检查.

例:

Constructor(p1,p2,p3,p4)
{
  var prod= from p in ctxt.products.expand("items\details")
            where p.x==p1 && p.xx==p2 && p.xxx==p3 && p.xxxx==p4
            select p;
}
Run Code Online (Sandbox Code Playgroud)

在上面的where子句中,只有当参数不为null时才应该进行条件检查.即,如果p2为null,那么where子句应如下所示

where p.x==p1 && p.xxx==p3 && p.xxxx==p4
Run Code Online (Sandbox Code Playgroud)

如果p2和p3为null则

where p.x==p1 && p.xxxx==p4
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何处理这个问题.如果可能的话,你可以为此提供示例代码

linq entity-framework dynamic where-clause

10
推荐指数
1
解决办法
1万
查看次数

使用带有多个子句的where子句删除SQLite Row

我一直在寻找并没有设法找到解决方案或工作示例,所以这里.

我已经建立了一个SQLite数据库,它有五列不同的字段,可以有效地为用户构建一个列表.列表中将有多个值相同,除了设置为自动增量的ROWID.

无论是用户还是程序都知道的ROWID一旦值已被输入到数据库中,所以我希望用户能够删除一行,如果它包含了其他领域的所有四个.

我的代码看起来像这样:

Database
            .delete(DATABASE_TABLE,
                    "KEY_DATE='date' AND KEY_GRADE='style2' AND KEY_STYLE='style' AND KEY_PUMPLEVEL='pumpLevel'",
                    null);
Run Code Online (Sandbox Code Playgroud)

但这并没有删除任何值.我几乎可以肯定这个命令的语法是罪魁祸首.

如何使用多个where子句格式化delete命令的where子句?

解决方案如下:

ourDatabase.delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM "
            + DATABASE_TABLE + " WHERE " + "date=? AND grade=? AND "
            + "style=? AND pump_level=?)", new String[] { date, grade,
            style, pumpLevel });
Run Code Online (Sandbox Code Playgroud)

sqlite android where-clause sql-delete

10
推荐指数
2
解决办法
3万
查看次数