2010-08-13 79 views
1

我有一個LINQ查詢我希望運行並將結果放到var或IQueryable中。但是,我將結果綁定到多個(4到10)控件,只希望查詢運行一次。將多個控件數據綁定到單個LINQ查詢

  • 我只是把結果納入所有數據源值,查詢每一個控制和控件(組合框等),改變selectedvalues只要其中任何改變,以配合對方運行。
  • 當我將控件綁定到result.ToList()或類似的東西上時,它修復了同步問題(即它們的行爲應該是獨立的),但是對於每個控件,查詢仍然運行一次。

這是ADO.NET日子裏的easycakes。我怎樣才能使LINQ查詢運行一次,仍然綁定到多個控件?

僞代碼:

var result = from c in dc.whatevers select c; 
ddlItem1.DataSource = result; 
ddlItem2.DataSource = result; 
ddlItem3.DataSource = result; 

另外:

var result = from c in dc.whatevers select c; 
ddlItem1.DataSource = result.ToList(); 
ddlItem2.DataSource = result.ToList(); 
ddlItem3.DataSource = result.ToList(); 

另外:

List<whatever> result = (from c in dc.whatevers select c).ToList(); 
ddlItem1.DataSource = result; 
ddlItem2.DataSource = result; 
ddlItem3.DataSource = result; 
+0

這似乎很奇怪,我認爲你的最後一個例子就不會工作。我的印象是,它必須立即在那個時候評估查詢。 – 2010-08-13 19:52:18

回答

2

試試這個:

var result = from c in dc.whatevers select c; 
List<whatevers> resultList = result.ToList(); // Query runs here 

ddlItem1.DataSource = new List<whatevers>(resultList); // Copy of the list 
ddlItem2.DataSource = new List<whatevers>(resultList); // Copy of the list 
ddlItem3.DataSource = new List<whatevers>(resultList); // Copy of the list 
3

在你的榜樣的最後一個選項是最簡單的。

這將執行一次查詢,將它讀入內存,並使用在內存中的表示綁定到控件

調用ToList()應該強制查詢執行一次。使用結果列表不應該重複查詢,而是加載內存集合中的值。你是否肯定你正在運行的代碼是上面提到的並且實際運行了四次查詢?

相關問題