这个问题在2国和3国都存在。 我有一个A级,成员为B级。 这些班级直接执行。 但是,当我把涉及B类的表述变成一种方法时,我会发现以下错误:
System.ArgumentException: Object of type System.Linq.Expressions.ConstantExpression cannot be converted to type System.Linq.Expressions.LambdaExpression .
只要我能看到,我就将确切的同样表述纳入任何(......)方法。 但出于某种原因,他们受到不同的对待。 我做了一些细致的工作,从第一种方法来看,这一表述被作为表达方式对待,而第2种方法中的同样表述似乎与NodeType Constant一样对待。 第2种方法中的表达方式的括号是: 因此,它认为,不同的试验方法中,表达的树木不同。 我根本不理解为什么和应该做些什么来解决这个问题。
Classes involvend:
public class A
{
public virtual int Id { get; set; }
public virtual ISet<B> DataFields { get; set; }
}
public class B
{
public virtual int Id { get; set; }
}
抽样测试代码:
[TestMethod]
public void TestMethod1()
{
using (ISession session = sessionFactory.OpenSession())
{
var records = session.Query<A>()
.Where<A>(a => a.DataFields
.Any(b => b.Id == 1));
Console.Write("Number of records is {0}", records.Count());
}
}
[TestMethod]
public void TestMethod2()
{
GetAsWhereB(b => b.Id == 1);
}
private void GetAsWhereB(Func<B, bool> where)
{
using (ISession session = sessionFactory.OpenSession())
{
var records = session.Query<A>()
.Where(a => a.DataFields
.Any(where));
Console.Write("Number of records is {0}", records.Count());
}
}