2015-11-20 58 views
2

我有一個查詢得到Child對象的一個​​Parent對象。
我需要將結果轉換爲List<KeyValuePair<int, int>>
無法弄清楚。nhibernate投影到匿名類型

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>>
我知道它涉及與annonymous對象Select,但無法弄清楚

+0

當你調試它,什麼是在'temp'項目的實際類型? –

+0

用'List'聲明瞭它的一個對象數組的列表,沒有'List'它的一個'IQueryOver ' – heyNow

回答

3

工作查詢應該是這樣的:

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])); 
+0

的作品!我使用了@ ilya-kogan的答案 – heyNow

1

如果列表中的每一項包含兩個元素的數組鍵入int,那麼你可以這樣寫:

var pairs = temp.Select(array => new KeyValuePair(array[0] as int, array[1] as int)); 

如果你不知道有一個int那裏,你可以使用Convert.ToInt32哪個比as安全。