NHibernate的 ICriteria条件查询问题,外键为null时查询不出数据了为什么?

失去乐山贼 2011-06-25 12:05:18
A表对应的外键(B表)可以为null,所以数据是中外键的ID是null,条件查询就不会显示数据,但是我用
this.HibernateTemplate.LoadAll<T>();

查询的时候,就可以查询出A表的信息,这是为什么?

ICriteria criteria = session.CreateCriteria(typeof(WareHouseArea), "wha");
//
criteria.CreateAlias("wha.WareHose", "h");

string areaCode = context.GetValue<string>("AreaCode");

string areaName = context.GetValue<string>("AreaName");

string remark = context.GetValue<string>("Remark");

long wareHouseId = context.GetValue<long>("WareHouseId");

if (!string.IsNullOrEmpty(areaCode))
{
criteria.Add(Expression.Like("wha.AreaCode", areaCode, MatchMode.Anywhere));
}

if (!string.IsNullOrEmpty(areaName))
{
criteria.Add(Expression.Like("wha.AreaName", areaName, MatchMode.Anywhere));
}

if (!string.IsNullOrEmpty(remark))
{
criteria.Add(Expression.Like("wha.Remark", remark, MatchMode.Anywhere));
}

if (wareHouseId!=0)
{
criteria.Add(Expression.Eq("h.Id", wareHouseId));
}


count = criteria.SetProjection(Projections.Count("Id").SetDistinct()).UniqueResult<int>();

if (count == 0)
{
return new List<WareHouseArea>();
}

这种查询方式,外键NULL的情况下,是查询不出A表信息的。怎么才能解决呢?
...全文
196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzz113579 2011-06-28
  • 打赏
  • 举报
回复
学习了,谢谢啊
阿非 2011-06-28
  • 打赏
  • 举报
回复
构造Criteria 时指定 JoinType 为 NHibernate.SqlCommand.JoinType.LeftOuterJoin
失去乐山贼 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxr0323 的回复:]

LoadAll <T>
是加载所有 没有用到你的条件
[/Quote]

ICriteria是默认inner Join的,只要改成LeftOuterJoin就行了。
子夜__ 2011-06-26
  • 打赏
  • 举报
回复
LoadAll <T>
是加载所有 没有用到你的条件
失去乐山贼 2011-06-25
  • 打赏
  • 举报
回复
没人回答吗?自己顶顶。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧