Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取NotSupportedException:不支持指定的方法。NHibernate C#_C#_Linq_Nhibernate_Jquery Select2 - Fatal编程技术网

获取NotSupportedException:不支持指定的方法。NHibernate C#

获取NotSupportedException:不支持指定的方法。NHibernate C#,c#,linq,nhibernate,jquery-select2,C#,Linq,Nhibernate,Jquery Select2,我有以下LINQ查询: var coverageQuery = _repository.LogicalEcus .Where(ecu => ecu.Alias != null) .Select(ecu => ecu.Alias) .Where(ecuAlias => searchTerm == "" || ecuAlias.Mnemonic.Contains(searchTerm.ToUpper())) .OrderBy(ecuAlias =&g

我有以下LINQ查询:

var coverageQuery = _repository.LogicalEcus
    .Where(ecu => ecu.Alias != null)
    .Select(ecu => ecu.Alias)
    .Where(ecuAlias => searchTerm == "" || ecuAlias.Mnemonic.Contains(searchTerm.ToUpper()))
    .OrderBy(ecuAlias => ecuAlias.Mnemonic)
    .Select(x => x.Mnemonic)
    .Distinct()
    .Select(mnemonic => new Select2Result(mnemonic));
查询已成功执行,但将结果传递给Select2PagedResult构造函数时:

var result = new Select2PagedResult(coverageQuery, pageNum, pageSize);
它将失败,并出现以下错误:

[NotSupportedException:不支持指定的方法。] NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNodeQuerySource)+117 NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.Process(IASTNode树)+188 NHibernate.Hql.Ast.ANTLR.astpromphicprocessor.Process()+51 NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode Ast、字符串查询标识符、字符串集合角色、布尔值浅型、IDictionary
2过滤器、ISessionFactoryImplementor工厂)+154
NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression,布尔浅层,IDictionary
2个EnabledFilter)+396 NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression,布尔浅层)+149 NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression)+133 NHibernate.Linq.DefaultQueryProvider.PrepareQuery(表达式、IQuery和查询、NhLinqExpression和nhQuery)+119 NHibernate.Linq.DefaultQueryProvider.Execute(表达式)+38 NHibernate.Linq.DefaultQueryProvider.Execute(表达式)+15 Continental.INDiuM.WebUi.Models.Select2PagedResult..ctor(IQueryable`1列表,Int32页码,Int32项目页面)位于C:\Projects\INDiuM\WebUi\Models\Select2PagedResult.cs:11中 C:\Projects\INDiuM\WebUi\Controllers\CoverageManagementController.getCoverageAlias(字符串id、字符串搜索词、Int32 pageSize、Int32 pageNum)中的Continental.INDiuM.WebUi.Controllers.CoverageManagementController.getCoverageAlias(字符串id、字符串搜索词、Int32 pageSize、Int32 pageNum) lambda_方法(闭包、控制器库、对象[])+301

Select2PagedResult的构造函数如下所示:

public Select2PagedResult(IQueryable<Select2Result> list, int pageNumber, int itemsPerPage)
{
    Total = list.Count();
    Results = list
        .Skip((pageNumber - 1) * itemsPerPage)
        .Take(itemsPerPage)
        .ToList();
}
public Select2PagedResult(IQueryable列表、int pageNumber、int itemsPerPage)
{
总数=list.Count();
结果=列表
.Skip((页码-1)*itemsPerPage)
.Take(itemsPerPage)
.ToList();
}
它将在Select2PagedResult的构造函数中的这一行失败:

var result = new Select2PagedResult(coverageQuery, pageNum, pageSize);

从上面的LINQ查询中删除.Distinct()可以解决问题,不会再次引发异常

此外,如果我将Select2PagedResult的构造函数更改为接受列表而不是IQueryable,也可以:

public Select2PagedResult(List<Select2Result> list, int pageNumber, int itemsPerPage)
public Select2PagedResult(列表列表、int pageNumber、int itemsPerPage)
我还尝试重新排列LINQ查询顺序,但没有成功

这就像.Count()在NhQueryable上不存在一样

我没有找到对此的解释,我真的不明白问题出在哪里,特别是因为几个月前它还在工作


任何建议都将不胜感激

如果在查询的每个阶段添加
AsEnumerable()
,然后重试,则可以缩小焦点:

var coverageQuery = 
    _repository.LogicalEcus
        .Where(ecu => ecu.Alias != null)
        .Select(ecu => ecu.Alias)
        .Where(ecuAlias => searchTerm == "" || ecuAlias.Mnemonic.Contains(searchTerm.ToUpper()))
        .OrderBy(ecuAlias => ecuAlias.Mnemonic)
        .Select(x => x.Mnemonic)

        // Materialises and runs query. Rest is processed against objects.
        // Any method that runs after this line but not before can be
        // transformed into SQL equivalent
        .AsEnumerable()    

        .Distinct()
        .Select(mnemonic => new Select2Result(mnemonic));

您可以在列表中上下移动对
AsEnumerable
的调用以查找罪魁祸首。

NhQueryable似乎不提供Count()-仅用于检查:您是否已尝试先转换为列表?例如,Total=list.ToList().Count;是的,我也试过了,但很不幸的是,NhQueryable似乎也没有.ToList()。这很奇怪,因为几个月前它还在工作。我不知道项目中会发生什么变化,从而导致失败。奇怪的是,从LINQ中删除.Distinct(),它就不会再失败了。.它在
Count()
中失败了,因为这就是查询被“具体化”和执行的地方。LINQ查询中有NH无法转换为SQL查询的内容。
Distinct()
方法如何知道哪些助记符是唯一的?