讓我的腳溼潤Linq。我試圖確定四個DataColumns中包含的不同值。所以,我從訪問空Linq結果非常緩慢
var c1types = (from DataRow row in dtSource.Select("hasreq")
where row["m"].ToInt() > 0
select new { col = row["m"] }).Distinct();
var c2types = (from DataRow row in dtSource.Select("hasreq")
where row["w"].ToInt() > 0
select new { col = row["w"] }).Distinct();
var c3types = (from DataRow row in dtSource.Select("hasreq")
where row["ag"].ToInt() > 0
select new { col = row["ag"] }).Distinct();
var c4types = (from DataRow row in dtSource.Select("hasreq")
where row["aq"].ToInt() > 0
select new { col = row["aq"] }).Distinct();
foreach (var type in c1types.Union(c2types).Union(c3types).Union(c4types).Distinct())
{
...
}
這個工程,但是很慢(4-5秒)。於是,我把在foreach之前以下
MessageBox.Show(c1types.Count().ToString()); // 1 - immediate display
MessageBox.Show(c2types.Count().ToString()); // 1 - immediate display
MessageBox.Show(c3types.Count().ToString()); // 1 - immediate display
MessageBox.Show(c4types.Count().ToString()); // 0 - 4-5 seconds to display
用我的樣本數據中,每個前三個選擇的返回單個獨特的值(計數()== 1)。第四個返回沒有值(Count()== 0)。我不明白的是爲什麼它瞬間顯示前三個計數,但第四個顯示4-5秒。看起來空洞的結果是經濟放緩的原因。這裏發生了什麼,什麼是最好的解決方法?
你使用.net 3.5或.net 4.0嗎? – Luke101 2010-06-11 00:22:40
我正在使用3.5。 – PahJoker 2010-06-11 00:53:35
我沒有太多的DataTable經驗 - 是每個查詢數據庫後端的查詢,還是隻查詢內存中的數據?如果一個數據庫,檢查sql(sql分析器,linqpad,無論什麼)可能有助於弄清楚發生了什麼(缺少索引?壞查詢?等) – 2010-06-11 06:34:46