在NHibernate LINQ中处理空值
本文关键字:处理 空值 LINQ NHibernate | 更新日期: 2023-09-27 18:21:27
我有一个NHibernate查询,如下所示:
var users = from u in _session.Query<User>();
select new
{
u.FirstName
u.LastName,
u.UserGroups.FirstOrDefault(x => x.Group.GroupId == id).EmailAddress
}
但是,如果用户没有具有指定ID的组,则NHibernate不会将EmailAddress
属性默认为null,而是抛出以下错误:
Exception of type 'Antlr.Runtime.NoViableAltException' was thrown [.Select[MyProject.Data.Entities.User,<>f__AnonymousType0`3[
...[Snipped]
它似乎被丢失的UserGroup实体卡住了。
如果我修改这个查询,以便在找不到新UserGroup实体的情况下创建一个新的UserGroup实体(如下所示),它会阻止错误的发生,并返回数据,但当我实际上只想将其默认为null(就像在entity Framework中一样)而不必实例化新UserGroup对象时,这似乎是一个破解。
var users = from u in _session.Query<User>();
select new
{
u.FirstName
u.LastName,
EmailAddress = (u.UserGroups.FirstOrDefault(x => x.Group.GroupId == id) ?? new UserGroup()).EmailAddress
}
有什么办法做到这一点吗?
试试这个:
var users = (from u in _session.Query<User>();
select new
{
u.FirstName
u.LastName,
EmailAddress = u.UserGroups.Where(x => x.Group.GroupId == id)
.Select(x => x.EmailAddress)
.FirstOrDefault()
}).ToList();
首先用Where
方法添加条件,然后用Select
方法更改输出,只得到EmailAddress
列,最后调用FirstOrDefault
。
使用前请记住检查EmailAddress
是否不是null
。