linq查询的问题

Posted

技术标签:

【中文标题】linq查询的问题【英文标题】:Problem with linq query 【发布时间】:2011-08-21 21:20:26 【问题描述】:

我正在尝试将 linq 用于 NHibernate(使用 Fluent NHibernate),但我遇到了 linq 查询问题。每次我尝试执行它时,我都会收到此消息:

"方法'get_IsReadOnlyInitialized' 在类型 'NHibernate.Linq.Util.DetachedCriteriaAdapter' 从程序集'NHibernate.Linq, 版本=1.1.0.1001,文化=中性, PublicKeyToken=null' 没有 实施。"

有人知道如何解决这个问题吗?我尝试使用带有模型上下文的解决方案表单this page,但它没有帮助。

这是代码:

using(var session = NHibernateHelper.OpenSession())   
   
var informations = (from i in  session<Information>() where i.Text=="some text" select  i).ToList();   

如果我不使用 where 部分,一切都很好,但如果我使用它,我会收到此错误。我认为问题出在 NHibernate.Linq.dll

【问题讨论】:

发布给您带来麻烦的代码总是一个好主意。你能做到吗? 这是使用 Nhibernate 2 和 NHibernate.Linq 项目吗?您是否尝试过在 Nhibernate 3 中进行相同的测试,如果我没记错的话应该内置 Linq 支持。 不,我有 NHibernate 3.1.0.4000、FluentNHibernate 1.2.0.712 和 NHibernate.Linq 1.0。它不是内置的。我必须独立添加它。 我明白了。这是集成在现有解决方案还是新项目中?您是否尝试过使用本机 Nhibernate ICriteria 重现相同的查询?如果这没有帮助,那么您能否发布相关映射,或者更好的是,发布一个包含代码和数据库架构的完整测试项目? 【参考方案1】:

您应该将 NHibernate.Linq.dll 与 NHibernate 3.0 一起使用! NHibernate 3.0 包含了 Linq(比旧的扩展 dll 好得多的版本),您只需要添加 using NHibernate.Linq; 并使用 session.Query&lt;T&gt;() 而不是 session.Linq&lt;T&gt;()

【讨论】:

你用什么代替QueryOptionsNHibernateQueryProvider【参考方案2】:

据我所知,您不是在比较,而是在分配文本。

不应该是 == 而不是 =:

using(var session = NHibernateHelper.OpenSession()) 
var informations = (from i in session<Information>() where i.Text=="some text" select i).ToList();

【讨论】:

以上是关于linq查询的问题的主要内容,如果未能解决你的问题,请参考以下文章

LINQ查询

Linq 查询运行缓慢,但查询单独运行很快

LINQ 查询到 LINQ 方法;为啥我需要 CBool​​?

将 SQL 转换为 Linq 查询

C# linq 如何编写子查询?

协助将 SQL 查询转换为 LINQ 查询