gpt4 book ai didi

c# - Linq2Sql - 存储复杂的 Linq 查询以供将来动态执行 - 原始文本 - 可能吗?

转载 作者:行者123 更新时间:2023-11-30 12:18:41 26 4
gpt4 key购买 nike

我从 Linq2Sql 中获得了很多乐趣。表达式树很棒,而且标准的 Linq2Sql 语法也很有趣。

现在我的应用程序的一部分我必须以某种方式将查询存储在数据库中,这些查询是为使用相同数据库和相同表的不同客户定制的(好吧,查看,但你知道我的意思)。基本上,我无法对任何内容进行硬编码,而且我必须保留查询语言明文,以便有人可以编写新的 where-clause 类型查询。

所以,如果那个描述很苛刻,让我澄清一下:

在我们应用程序的先前版本中,我们过去常常使用原始 SQL 对数据库进行直接 SQL 调用。是的。这很有趣,很脏,但很管用。我们会有一个充满不同标准的数据库表,例如

(EventType = 6 and Total > 0)

或子查询样式

(EventType = 7 
AND Exists (
select *
from events as e1
where events.EventType = e1.EventType
and e1.objectNumber = 89)
)

(sql 注入(inject)有人吗?)

在 Linq2Sql 中,这更具挑战性。我可以在 CLR 中使所有这些查询都没有问题,但是能够将动态 where 条件传递给 Linq 更具挑战性,特别是如果我想执行子查询(如上例)。

我的一些想法:

获取原始表达式并将其存储 --- 但我不知道如何获取原始文本表达式并将其反转为可执行对象表达式。

编写类似 SQl 的语言,让它解析代码并生成 Linq 表达式——哇,那会很有趣

我很确定没有 SomeIqueryable.Where("EventType = 6 and Total > 54")。我读到它在 beta1 中可用,但我不知道你现在如何做到这一点。

var exp2 = context.POSDataEventView.Where("EmployeeNumber == @0", 8310); 

这对我来说是最简单的部署方式..我认为。

存储序列化的表达式——哇..这会让试图编写查询的用户感到困惑——该死,我不确定我是否可以将其全部输入。

因此,我正在寻找一些关于如何以某种明文形式存储查询,然后以某种方式对我的 Linq2Sql 对象执行查询而不调用 ExecuteSQL 的想法。我想使用 LinqObjects。

附言如果有帮助,我正在为此应用程序使用 pLinqo。不过它仍然是 linq2sql。

提前致谢!

最佳答案

也许是 Dynamic LINQ Library (在 MSDN 示例中)会有帮助吗?

特别是,用法如下: .Where("Category=2 And UnitPrice>3"

这应该适用于任何 IQueryable<T>源 - 只需调用 .AsQueryable() 即可包含 LINQ-to-Objects在序列上(通常为 IEnumerable<T> )。

关于c# - Linq2Sql - 存储复杂的 Linq 查询以供将来动态执行 - 原始文本 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1558269/

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