nhibernate 投射到匿名类型
nhibernate projection to anonymous type
我有一个查询要获取 Parent
个对象的 Child
个对象的计数。
我需要将结果转换为 List<KeyValuePair<int, int>>
想不通。
Child childAlias = null;
Parent parentAlias = null;
int[] parentIds = new int[]{1,2,3};
var temp = sess.QueryOver<Parent>()
.JoinQueryOver(p => p.Children, () => childAlias)
.Where(c => c.Parent.Id.IsIn(parentIds))
.Select(Projections.ProjectionList()
.Add(Projections.GroupProperty(Projections.Property<Parent>(x => x.Id)))
.Add(Projections.Count(() => childAlias.Id)))
.List<object[]>();
我需要这个 List<object[]>
成为 List<KeyValuePair<int, int>>
我知道它涉及一个 Select
和一个匿名对象,但无法弄清楚
如果列表的每一项都包含一个包含两个int
类型元素的数组,那么你可以这样写:
var pairs = temp.Select(array => new KeyValuePair(array[0] as int, array[1] as int));
如果您不确定那里是否有 int
,您可以使用 Convert.ToInt32
,它比 as
.
更安全
工作查询应如下所示:
Child childAlias = null;
Parent parentAlias = null;
int[] parentIds = new int[] {1, 2, 3};
var temp = sess.QueryOver<Parent>()
.JoinQueryOver(p => p.Children, () => childAlias)
.WhereRestrictionOn(c => c.Parent.ID).IsIn(parentIds)
.Select(Projections.ProjectionList()
.Add(Projections.GroupProperty(Projections.Property<Parent>(x => x.ID)))
.Add(Projections.Count(() => childAlias.ID)))
.List<object[]>()
.Select(x => new KeyValuePair<int,int>((int)x[0], (int)x[1]));
我有一个查询要获取 Parent
个对象的 Child
个对象的计数。
我需要将结果转换为 List<KeyValuePair<int, int>>
想不通。
Child childAlias = null;
Parent parentAlias = null;
int[] parentIds = new int[]{1,2,3};
var temp = sess.QueryOver<Parent>()
.JoinQueryOver(p => p.Children, () => childAlias)
.Where(c => c.Parent.Id.IsIn(parentIds))
.Select(Projections.ProjectionList()
.Add(Projections.GroupProperty(Projections.Property<Parent>(x => x.Id)))
.Add(Projections.Count(() => childAlias.Id)))
.List<object[]>();
我需要这个 List<object[]>
成为 List<KeyValuePair<int, int>>
我知道它涉及一个 Select
和一个匿名对象,但无法弄清楚
如果列表的每一项都包含一个包含两个int
类型元素的数组,那么你可以这样写:
var pairs = temp.Select(array => new KeyValuePair(array[0] as int, array[1] as int));
如果您不确定那里是否有 int
,您可以使用 Convert.ToInt32
,它比 as
.
工作查询应如下所示:
Child childAlias = null;
Parent parentAlias = null;
int[] parentIds = new int[] {1, 2, 3};
var temp = sess.QueryOver<Parent>()
.JoinQueryOver(p => p.Children, () => childAlias)
.WhereRestrictionOn(c => c.Parent.ID).IsIn(parentIds)
.Select(Projections.ProjectionList()
.Add(Projections.GroupProperty(Projections.Property<Parent>(x => x.ID)))
.Add(Projections.Count(() => childAlias.ID)))
.List<object[]>()
.Select(x => new KeyValuePair<int,int>((int)x[0], (int)x[1]));