NHibernate的扩展LAMBDA上不能使用的DetachedCriteria任何别名查询
-
20-09-2019 - |
题
我想写需要一个别名,一个简单的查询,因为它是一个多到许多ASSOCATION但我不能让它与NH LAMBDA扩展工作。它总是给我一个编译错误,尽管据我可以告诉它是完全一样的文档和所有的例子,我在网上看到。
<强>作品强>
var query = DetachedCriteria.For<County>()
.CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
//.CreateCriteria<County>(x => x.Zips,
// () => zipAlias, JoinType.LeftOuterJoin)
.Add<Zip>(zip => zip.ZipCode == zipCode);
<强>不工作强>
var query = DetachedCriteria.For<County>()
//.CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
.CreateCriteria<County>(x => x.Zips,
() => zipAlias, JoinType.LeftOuterJoin)
.Add<Zip>(zip => zip.ZipCode == zipCode);
结果在构建Error 22 The name 'zipAlias' does not exist in the current context
de
智能感知也凸显了个createCriteria ** ** <County>
说它不理解的方法但是它并正确地显示我的参数名称时,我的括号内。
解决方案
在文档充满得心应手例子。
您zipAlias
需要在本地范围内的变量。
Zip zipAlias = null;
string zipCode = "";
var query = DetachedCriteria.For<County>()
.CreateCriteria<County>(x => x.Zips, () => zipAlias, JoinType.LeftOuterJoin)
.Add<Zip>(zip => zip.ZipCode == zipCode);
作为文档链接下载的代替渲染,我已经复制了一些部分。
创建标准协会别名强>结果 使用原来的ICriteria API:
ICriteria before = CreateSession()
.CreateCriteria(typeof(Person))
.CreateCriteria("Children", "childAlias")
.Add(Restrictions.Eq("Nickname", "test"));
使用NHibernate LAMBDA扩展:
Child childAlias = null;
ICriteria after = CreateSession()
.CreateCriteria(typeof(Person))
.CreateCriteria((Person p) => p.Children, () => childAlias)
.Add<Child>(c => c.Nickname == "test");
创建标准别名协会别名,加入类型点击 使用原来的ICriteria API:
ICriteria before = CreateSession()
.CreateCriteria(typeof(Person), "personAlias")
.CreateCriteria("personAlias.Children", "childAlias", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("Nickname", "test"));
使用NHibernate LAMBDA扩展:
Person personAlias = null;
Child childAlias = null;
ICriteria after = CreateSession()
.CreateCriteria(typeof(Person), () => personAlias)
.CreateCriteria(() => personAlias.Children, () => childAlias, JoinType.LeftOuterJoin)
.Add<Child>(c => c.Nickname == "test");
创建标准协会别名,加入类型点击 使用原来的ICriteria API:
DetachedCriteria before =
DetachedCriteria.For<Person>()
.CreateCriteria("Children", "childAlias", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("Nickname", "test"));
使用NHibernate LAMBDA扩展:
Child childAlias = null;
DetachedCriteria after =
DetachedCriteria.For<Person>()
.CreateCriteria((Person p) => p.Children, () => childAlias, JoinType.LeftOuterJoin)
.Add<Child>(c => c.Nickname == "test");
不隶属于 StackOverflow