2013-08-23 113 views
0

我想問是否有更好的方法來實現我想要做的事情。實體框架IQueryable,有2個查詢

我需要獲取具有日期格式或等於給定日期的子圖表的所有記錄,以及具有日期小於給定日期的第一條記錄。

我發現這個解決方案有效,但我不確定這是否是最好的方法。

var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
{ 
    Istc0 = a, 
    Interests = a.Interests.Where(d => d.InDat >= date) 
}); 

var qq = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
{ 
    Istc0 = a, 
    Interests = a.Interests.Where(d => d.InDat < date).OrderByDescending(d => d.InDat).Take(1) 
}); 

var xxx = q.ToList()[0].Istc0; 
xxx = qq.ToList()[0].Istc0; 

return xxx; 
+3

看起來你正在執行'q'查詢,然後扔掉結果。 – SWeko

+0

這裏有點不清楚你想在這裏做什麼。看看你的代碼,你只是得到q的第一個結果的'Istc0'屬性,然後用qq的第一個結果的'Istc0'屬性覆蓋它。還有什麼你想要做的嗎?兩個查詢的「興趣」屬性似乎都沒有被使用。 –

+0

好吧,我試圖更好地解釋它,我必須從過去的一個日期到今天的所有記錄都記錄在我的興趣表中,但是在那天之前我還需要記錄第一條記錄。我以這種方式工作,我得到了我需要的所有數據,但它似乎不是一個乾淨的方式來完成這項工作 – Raphael

回答

1

我不知道你需要返回哪一個。可能是yyy。

var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
    { 
     Istc0 = a, 
     Interests = a.Interests.Where(d => d.InDat >= date) 
    }).ToList(); 


var xxx = q[0].Istc0; 
var yyy = q.OrderByDescending(d => d.InDat).Take(1).SingleOrDefault().Istc0; 

Dictionary<string,decimal> result = new Dictionary<string,decimal>(); 

result.Add("all",xxx); 
result.Add("previous",yyy); 

return result; 

在這個例子中我創建一個字符串鍵一個字典(可以是整數或任何你喜歡),並以十進制(我猜測的返回值是十進制類型)值來存儲的結果查詢。然後我回來這本字典。

另一種方法是擁有一個強類型對象並返回該對象的列表。

最後,您可以定義兩個輸出參數(read this)。例如:

public void GetInterestRates(string listKey, out decimal currentRate, out decimal previousRate) 
{ 
    var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
     { 
      Istc0 = a, 
      Interests = a.Interests.Where(d => d.InDat >= date) 
     }).ToList(); 


    var currentRate = q[0].Istc0; 
    var previousRate = q.OrderByDescending(d => d.InDat).Take(1).SingleOrDefault().Istc0; 

} 

而當你想用這個:

decimal currentRate , previousRate; 
GetInterestRates(listKey, currentRate , previousRate); 
+0

我需要這兩個查詢的結果。第一個查詢必須返回大於或等於我通過的日期的所有利率,第二個查詢返回第一個利率,該日期小於我通過的日期 – Raphael

+0

嗨,您可以查看一些選擇我有在我編輯的職位。 –

0

嗨感謝您的回答。

隨着您發佈的查詢,我沒有得到我需要的所有數據。我不認爲我能用一個查詢得到我需要的。

 
Interest table 
----------------- 
2013-5-16 | 1% 
2013-6-21 | 0.8% 
2013-7-12 | 0.5% 
2013-8-06 | 0.6% 

istc0表包含我所有的isin號碼,以及與興趣表One to Many之間的關係。

該函數的參數是日期。所以如果我通過例如

日期= 2013年7月1日

結果我需要的是以下幾點:

 
Interest table 
----------------- 
2013-6-21 | 0.8% 
2013-7-12 | 0.5% 
2013-8-06 | 0.6% 

所以在我的抗凍後分配到q第一個查詢檢索所有7月第一次後,第二次查詢分配給qq檢索第一個利率在7月之前。 我的功能完成了這項工作,我得到了我需要的一組數據,但它似乎並不是最簡單的方法。