2014-01-17 29 views
0

我有3个表,LINQ的顺序通过柱,柱优先与值

Operation

色谱柱: idOperation intcdLangPrimary char(2)

Languages

色谱柱: cdLang char(2)nmLang nvarchar(10)

OperationLanguages 列:idOperation intcdLang char(2)

我的代码:

var jsonObject = dbContext.Operations 
       .Single(o => o.idOperation == idOperation) 
       .Languages 
       .Select(l => new { l.cdLang, l.nmLang }); 

我试图做(没有成功), 是排序按AZ的语言,而是把cdLangPrimary为第一。

我知道这是可能的,如果我创建一个列表(或字典),像这样:

var languages = new List<Languages>(); 
var dLanguage = operation.Languages.Single(l => l.cdLang == operation.cdLangPRIMARY); 

      languages.Add(dLanguage); 

      languages.AddRange(operation.Languages.Where(l => l.cdLang != dLanguage.cdLang)); 

只是不知道是否有一个选项,以同样的使用LINQ 或以更有效的方式是什么?

回答

1

如果我明白你的问题,下面应该这样做:

var result = dbContext.Languages 
         .Where(l => l.OperationId == idOperation) 
         .OrderByDescending(l => l.cdLang == l.Operation.cdLangPrimary) 
         .ThenBy(l => l.cdLang) 
         .Select(l => new { l.cdLang, l.nmLang }); 

如果你没有在实体框架的OperationLanguage之间建立关系,那么你就可以达到同样的效果如下:

var operation = dbContext.Operations 
         .SingleOrDefault(o => o.idOperation == idOperation); 

if(operation != null) 
{ 
    var result = dbContext.Languages 
          .Where(l => l.OperationId == idOperation) 
          .OrderByDescending(l => l.cdLang == operation.cdLangPrimary) 
          .ThenBy(l => l.cdLang) 
          .Select(l => new { l.cdLang, l.nmLang }); 
} 
+0

谢谢你的回答 –