2010-08-25 47 views
0

我有一個individualProfileId(GUID)的字符串列表(A),它可以以任何順序(用於以特定順序顯示個人檔案用戶輸入),由於它是cms功能的一部分,因此作爲字符串存儲。我如何通過uniqueindentifiers數組來訂購Linq中uniqueidentifiers的sql數據源

我也有一個asp c#中繼器,它使用LinqDataSource來查詢單個表。該中繼器需要使用有序列表(A)以指定的順序顯示結果。

這是我遇到的問題。有沒有人有任何想法?

表(A)

'CD44D9F9-DE88-4BBD-B7A2-41F7A9904DAC', 
'7FF2D867-DE88-4549-B5C1-D3C321F8DB9B', 
'3FC3DE3F-7ADE-44F1-B17D-23E037130907' 

數據源例如

IndividualProfileId     Name  JobTitle EmailAddress IsEmployee 
3FC3DE3F-7ADE-44F1-B17D-23E037130907 Joe Blo Director [email protected] 1 
CD44D9F9-DE88-4BBD-B7A2-41F7A9904DAC Maxy Dosh The Boss    1 
98AB3AFD-4D4E-4BAF-91CE-A778EB29D959 some one a job [email protected] 1 
7FF2D867-DE88-4549-B5C1-D3C321F8DB9B Max Walsh CEO     1 

回答

0

這樣做有一個非常簡單的方法(單行),因爲您首先從數據庫中獲取員工結果(因此resultSetFromDatabase只是示例數據,您應該在此處獲得一些LINQ查詢以獲取您的結果) 。

var a = new[] { "GUID1", "GUID2", "GUID3"}; 
var resultSetFromDatabase = new[] 
{ 
    new { IndividualProfileId = "GUID3", Name = "Joe Blo" }, 
    new { IndividualProfileId = "GUID1", Name = "Maxy Dosh" }, 
    new { IndividualProfileId = "GUID4", Name = "some one" }, 
    new { IndividualProfileId = "GUID2", Name = "Max Walsh" } 
}; 

var sortedResults = a.Join(res, s => s, e => e.IndividualProfileId, (s, e) => e); 

除非您願意編寫一些專用的SQL存儲過程,否則不可能讓數據源直接以正確的順序得到結果。問題是你必須告訴數據庫a的內容。使用LINQ只能通過Contains完成。這並不保證結果集中的任何順序。

+0

真棒,工作,很好,乾淨。謝謝 – user430381 2010-08-25 08:48:05

0
  1. 打開列表(A),你說是,爲實際名單。例如,您可以使用listAsString.Split(","),然後從每個元素中刪除'。我會假設完成的列表被稱爲list

  2. 查詢數據庫檢索您需要的行,例如:

    var data = db.Table.Where(row => list.Contains(row.IndividualProfileId)); 
    
  3. 從傳回的數據,創建由IndividualProfileId鍵控字典,例如:

    var dic = data.ToDictionary(e => e.IndividualProfileId); 
    
  4. 遍歷列表並檢索每個項目的字典條目:

    var results = list.Select(item => dic[item]).ToList(); 
    

現在results將具有相同順序的記錄,其ID爲list