2009-09-30 25 views
1

我有一個linq實體調用Inquiry,它有一個屬性:string DateSubmitted。Linq到EF表達式樹/謂詞int.Parse解決方法

我正在寫一個應用程序,我需要返回IQueryable查詢有一個DateSubmitted在一個特定的日期範圍內。

理想我想寫點東西像

IQueryable<Enquiry> query = Context.EnquirySet.AsQueryable<Enquiry>(); 
int dateStart = int.Parse("20090729"); 
int dateEnd = int.Parse("20090930"); 

query = (from e in query 
    where(enq => int.Parse(enq.DateSubmitted) < dateEnd) 
    where(enq => int.Parse(enq.DateSubmitted) > dateStart) 
    select e); 

顯然LINQ到EF不承認int.Parse,所以我想我可以實現我想返回謂詞的表達方法? ??

我一直在使用PredicateBuilder玩,並且遍地看,但我已經成功地炒我的大腦,試圖解決這個問題。當然,我可以添加另一個屬性到我的實體並將其轉換,但我真的很想了解這一點。任何人都可以解釋或給出一個不會讓我大腦絞痛的例子/鏈接嗎?

在此先感謝

馬克

回答

3

如果你知道你的日期字符串是有效的,而且他們真正的順序(這是一個自然的排序順序),你也許可以用繩子逃脫比較:

IQueryable<Enquiry> query = Context.EnquirySet.AsQueryable<Enquiry>(); 
string dateStart ="20090729"; 
string dateEnd = "20090930"; 

query = (from e in query 
    where(enq => enq.DateSubmitted.CompareTo(dateEnd)) < 0) 
    where(enq => enq.DateSubmitted.CompareTo(dateStart)) > 0) 
    select e); 
+0

這是一個很好的解決方法,謝謝我可能會使用它,謝謝! 據我所知,有沒有一種方法與Predicate做這種比較?我正在慢慢把我的腦袋弄到這個地方:-) – Mark 2009-09-30 15:36:53

+0

那麼你是用一個謂詞來開始吧。我不知道我真的明白這個問題... – 2009-09-30 15:51:14

+0

喬恩 我想我正在尋找一種更通用的方式,可以在需要類型轉換時比較值。我有情況下的實體屬性暴露爲枚舉和字符串需要與int進行比較。 我認爲從看PredicateBuilder我可能會寫一個通用的一組方法,例如可以做一個小於或大於比較將輸入類型轉換爲所需的類型。 請原諒我缺乏知識,我理解Linq的基本知識,但我試圖讓我的頭圍繞擴展方法,Expresison樹和Predicates。 – Mark 2009-10-01 07:44:50