2010-08-25 44 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