2017-02-16 55 views
1

我有以下代码:LINQ到实体 - 排序阵列

public List<OversizeElement> GetOversizeRegulations(List<string> states) 
    { 
     var tmpList = (from i in _db.States 
         where states.Any(p=>i.Name == p) 
         select new 
         { 
          StateID = i.ID, 
          StateName = i.Name, 
          StateShortName = i.ShortName 
         }).ToList(); 

所以,我请从“州”的变量对于所有状态的附加信息。它的工作原理,但我需要得到相同的顺序,如'状态'变量。如何排序?它需要IComparer的对象,但我无法想象如何把它写在我的情况

+0

如何'states'有序? –

+0

是从状态不同然后tmplist? – lordkain

+0

@lordkain,不同 –

回答

2

如果你想在原来的排序,你可以这样做:

public List<Destination> GetOversizeRegulations(List<string> states) 
{ 

     var tmpDictionary = (from i in _db.States 
          where states.Contains(i.Name) 
          select new 
             { 
             StateID = i.Id, 
             StateName = i.Name, 
             StateShortName = i.ShartName 
             } 
          ).ToDictionary(k => k.StateName, k => k); 

     var result = states 
        .Where(m=>tmpDictionary.ContainsKey(m)) 
        .Select(m => tmpDictionary[m]).ToList(); 


} 
+0

'_db.Destinations'从哪里来? –

+0

@MatiasCicero对不起,这是你的Table(States)。我没有编译它,我认为没有任何其他的语法错误.. –

+0

@MatiasCicero我刚刚添加了最后的Where情况下状态现在不存在于db –

0

枚举states,而不是_db.States

var tmpList = states 
       .Select(s => _db.States.SingleOrDefault(st => st.Name == s)) 
       .Where(s => s != null) 
       .Select(new 
       { 
        StateID = s.ID, 
        StateName = s.Name, 
        StateShortName = s.ShortName 
       }); 
0

您可以OrderBy函数中使用IndexOf功能。假设在两个列表中都有相同的id字段。让我们在这件事上说,ID叫StateId

var tmpList = (from i in _db.States 
        where states.Any(p=>i.Name == p) 
        select new 
        { 
         StateID = i.ID, 
         StateName = i.Name, 
         StateShortName = i.ShortName 
        }).OrderBy(s => states.Select(x => x.StateId).IndexOf(s.StateId)).ToList();