C# 如何获取返回表达式的方法以解决“epress中无法识别的方法调用”错误?

C# 如何获取返回表达式的方法以解决“epress中无法识别的方法调用”错误?,c#,nhibernate,lambda,C#,Nhibernate,Lambda,我有以下语句抛出了一个我不理解的错误: return (int) _session.CreateCriteria<T>() .Add(LambdaSubquery.Property<Fund>(x => x.Id) .In(GetAvailableIdsPerDataUniverse(x => x.GetDataUniverseId()))) .AddNameSearchCriteria<T>(searchExpre

我有以下语句抛出了一个我不理解的错误:

return (int) _session.CreateCriteria<T>()
    .Add(LambdaSubquery.Property<Fund>(x => x.Id)
        .In(GetAvailableIdsPerDataUniverse(x => x.GetDataUniverseId())))
    .AddNameSearchCriteria<T>(searchExpression)
    .SetProjection(LambdaProjection.Count<T>(e => e.Id))
    .UniqueResult();
并且x=>x.GetDataUniverseId在我的Fund类中定义为

如果不是尝试将x=>x.GetDataUniverseId作为参数传递,而是使用“硬编码”f=>f.Id或f=>f.Company.Id,则此方法有效。我希望正在处理的类型能够提供所需的表达式,而不是将该表达式传递到使用GetAvailableIdsPerDataUniverse的每个方法中。我认为它可以执行返回表达式的方法,而不是访问推断类型的属性

问题:

我能做些什么来解决这个错误吗

注:

一切都很好,所以当我运行它时,我有点惊讶地看到它抛出了一个错误。主要原因是,当我将表达式作为参数传入时,我对其进行了“硬编码”,结果很好

此外,我还尝试了以下操作,但没有成功,因为我指定了希望GetAvailableIdsPerDataUniverse操作的类型:

.In(GetAvailableIdsPerDataUniverse<Fund>(x => x.GetDataUniverseId())))
尝试:


我被告知这里的问题是我想要多态静态方法的行为,但我不能这样做,因为GetDataUniverseId不是一个实例方法,我需要一个实例来多态地使用它

这个解决方案虽然效率低下,因为它使用了大量的反射,但是它使用了新的T

以致

    .Add(LambdaSubquery.Property<Fund>(x => x.Id)
        .In(GetAvailableIdsPerDataUniverse(x => x.GetDataUniverseId())))
变成

    .Add(LambdaSubquery.Property<Fund>(x => x.Id)
        .In(GetAvailableIdsPerDataUniverse((new T()).GetDataUniverseId())))
唯一的另一个问题是,该方法存在于:

    public IEnumerable<T> GetEntitiesByName<T>(int pageSize, string searchExpression)
        where T : class, ISearchableEntity
现在必须具有新约束,如下所示:

    public IEnumerable<T> GetEntitiesByName<T>(int pageSize, string searchExpression) 
        where T : class, ISearchableEntity, new()

我希望有人能从中找到比@Sunny

提供的“答案”更有用的东西,恕我直言,DaveDev,我的印象是,我们得到了错误,因为“x”在之前的lamba中已经定义了&所以我的“答案”…如果是这样的话,就足够公平了。但我相信你能理解我的沮丧。如果这是你的真实意图,你应该用解释更新你的答案。大家好,我知道这个问题已经很老了,但你们现在能不能重现这个错误,以便再次检查epress的拼写?因为两年后,Ehsan报告了nhibernate中的一个类似错误,其中有一个表达式的拼写错误,如果拼写在2010年到2012年间确实有所改善,那么最好更新问题以匹配实际的拼写错误。
    .Add(LambdaSubquery.Property<Fund>(x => x.Id)
        .In(GetAvailableIdsPerDataUniverse(x => x.GetDataUniverseId())))
    .Add(LambdaSubquery.Property<Fund>(x => x.Id)
        .In(GetAvailableIdsPerDataUniverse((new T()).GetDataUniverseId())))
    public IEnumerable<T> GetEntitiesByName<T>(int pageSize, string searchExpression)
        where T : class, ISearchableEntity
    public IEnumerable<T> GetEntitiesByName<T>(int pageSize, string searchExpression) 
        where T : class, ISearchableEntity, new()