2012-03-13 21 views
0

我有一個Person實體。人有很多記錄的聚合。的LINQ to NHibernate的這個消息異常:`get_Item(Int32)已`

public class Person() 
{ 
    virtual public IList<Record> Records {get; set;} 
} 

public class Record() 
{ 
    virtual public int Number {get; set;} 
} 

我有NHibernate的LINQ查詢。

var q = SessionInstance.Query<Person>() 
     .Where(x => x.Records.Any() && x.Records[0].Number>= 5); 
q.ToList<Person>() 

這是一個運行時錯誤此消息異常:Domain.Entities.Record get_Item(Int32)

爲什麼?

回答

0

你正試圖從一個集合(從零開始收集)獲得第一個元素。 如果collection爲null或者沒有元素會拋出異常。

變化,要

var q = SessionInstance.Query<Person>().Where(x => x.Records.Any() && x.Records.FirstOrDefault().Number>= 5); 
q.ToList<Person>() 

希望它能幫助。

修訂

這是可行的,但請務必邏輯是正確的。

var q = SessionInstance.Query<Person>().Where(x => x.Records.Any(r => r.Number >= 5)); 
+0

這有另一個例外。新的消息異常是:拋出了類型'Antlr.Runtime.NoViableAltException'的異常。 [。凡[Domain.Entities.Person](NHibernate.Linq.NhQueryable'1 [Domain.Entities.Person],報價((X,)=>(AndAlso(。任何[Domain.Entities.Record](x.Records ,),GreaterThanOrEqual(.FirstOrDefault [Domain.Entities.Record](x.Records,).VolunteerFront,P1)))))] – Ehsan 2012-03-13 12:29:34

+0

嘗試此查詢變種q = SessionInstance.Query ()。凡(X => x.Records.Any(r => r.Number> = 5)); – 2012-03-13 12:39:13

+0

但這將返回Person.Records.Number> = 5的集合中的任何人員。是否有一個原因,您只是檢查查詢中的第一個項目? – 2012-03-13 12:40:11

0

你的異常信息是不完整的,但我相信這個問題僅僅是收集索引(get_Item())方法的支持尚未實現。

我寫了一個非常類似的一塊爲IDictionary<,>,檢查出DictionaryGenerator.cs

您可以打開這個Jira issue,只是實現並註冊你的發電機,或者更好的是,打開一個問題,用叉子叉回購,實施該功能併發送拉請求。

相關問題