我有一个课程表,我需要根据搜索框中输入的关键字进行搜索.这是一个示例查询:
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子句,如下所示:
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做出最简单的方法是什么?
谢谢.
我有一个递归查询,如果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) 我有一个问题:
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],但是想不出办法来解决这个问题.
这甚至可能吗?
我在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)
有人可以给我一个提示
今天苦苦挣扎.
我有以下方法返回产品列表..爱.
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)
如何将几个IF语句合并到where子句中?
例如,如果未触摸基础材料ddl但选择了源ddl中的项目,则结果将返回与基础材料关联但由所选源过滤的所有内容.
这甚至有意义吗?!
我甚至不确定我采取了正确的方法 - 请原谅我的无知.
我遇到了一些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)的一部分,所以它优先,并且首先在该条件下钻取结果.
谢谢!
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) 我正在使用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)
谁能告诉我如何处理这个问题.如果可能的话,你可以为此提供示例代码
我一直在寻找并没有设法找到解决方案或工作示例,所以这里.
我已经建立了一个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) where-clause ×10
linq ×4
postgresql ×2
sql ×2
android ×1
arrays ×1
c# ×1
datetime ×1
dynamic ×1
if-statement ×1
ruby ×1
sql-delete ×1
sqlite ×1