【问题标题】:Combine Linq2SQL with custom SQL将 Linq2SQL 与自定义 SQL 相结合
【发布时间】:2010-09-10 00:26:29
【问题描述】:

我想从自定义 SQL 查询中获取 IQueryable(我有我的理由):

类似:

IQueryable<Client> query = Foo<Client>("SELECT * FROM Clients WHERE ...");

query.Where(e => e.Active==true).Skip(10).Take(10); //etc.

有没有办法实现 Foo?

我找到了ExecuteQuery&lt;T&gt;(...).AsQueryable(),但这不起作用,因为它会加载所有记录。

【问题讨论】:

标签: c# linq-to-sql


【解决方案1】:

您能否将这部分查询放在视图中?

SELECT * FROM Clients...

然后你可以使用 LINQ WhereSkip/Take

var results = db.MyViews.Where(e => e.Active == true).Skip(10).Take(10);

【讨论】:

  • 不,澄清一下,SQL 是用户提交的。 (我正在开发一个管理工具)
  • 在这种情况下,我会将查询包装在另一个查询中以处理分页,我认为此时您处于动态 SQL 领域。你用的是什么数据库?
【解决方案2】:

可以实现这一点,但您必须解析 SQL 文本并查找映射以获得正确的类型(例如,从 ClientsClient )。没有用于从 SQL 自动生成 IQueryable 的内置工具。

【讨论】:

    【解决方案3】:

    在我看来,最好的方法是实现您自己的包装器,继承 IQueryable 来处理这种情况。在 GetEnumerator() 中,您可以实现逐行读取结果或简单地从您自己的 GetEnumerator() 方法返回 ExecuteQuery(...).GetEnumerator()。

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 2015-02-15
      • 2016-05-27
      • 2014-09-10
      • 1970-01-01
      • 2023-04-06
      • 2010-12-22
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多