2017-04-20 43 views
3

我有一個表,如下LINQ的兩列不同和返回爲單場

Id username userid departmentname 
1 abc  1234 test1 
2 abc  3456 test1 
3 abc  1234 test2 
4 abc  3456 test2 
5 def  8989 test1 

我要申請不同的用戶名和用戶ID列在LINQ

返回兩列單場

所需的輸出將在下文

abc-1234 
abc-3456 
def-8989 

我曾嘗試以下

[System.Web.Script.Services.ScriptMethod()] 
      [System.Web.Services.WebMethod] 
      public static List<string> getUserDetails(string prefixText, int count) 
      { 
       List<string> usernames = new List<string>(); 
       using (DBEntities context = new DBEntities()) 
       { 
        var distinctUsers = context.counters.Select(m => new { m.UserName, m.UserID }).Distinct().ToList();     
        var abc = distinctUsers.Select(p => new { DisplayText = p.UserName + "-" + p.UserID }).ToList(); 

        usernames = abc.Where(r => r.DisplayText.StartsWith(prefixText)).ToList();    

       } 
return usernames; 
      } 

但我已經結束了這個問題。 1)一旦我得到了所需的結果,我需要篩選以輸入字符串(prefixtext)開頭的列表。我已經在變量abc中獲得了所需的結果,並且能夠獲得以輸入字符串開頭的列表,但是我得到的錯誤是'不能隱式地將類型列表匿名轉換爲列表字符串。如何將列表匿名類型轉換爲列表字符串? 2)上述方法是否更好?或者有沒有比這更好的方法?

謝謝你'Ashique',我沒有在另一行代碼中使用group。

var distinctUsers = context.counters.Select(m => (m.UserName + "-" + m.UserID)).Distinct().ToList(); 
var abc = distinctUsers.AsParallel().Where(x => x.StartsWith(prefixText)).ToList(); 

默認情況下,上面已經實現了我所需要的順序。它在默認情況下訂購或我應該執行類似下面的命令:

var distinctUsers = context.counters.Select(m => (m.UserName + "-" + m.UserID)).Distinct().OrderBy(n=>n).ToList(); 
+0

使用「group by」 – Bambuk

回答

0

你可以試試這個:

using (DBEntities context = new DBEntities()) 
       { 
        var distinctUsers = context.counters.Select(m => (m.UserName + "-" + m.UserID)).ToList();    
         usernames = distinctUsers.GroupBy(g => g).Select(x => x.FirstOrDefault()).ToList();    

       } 

OR

using (DBEntities context = new DBEntities()) 
       {         
         usernames = context.counters.Select(m => (m.UserName + "-" + m.UserID)).GroupBy(g => g).Select(x => x.FirstOrDefault()).ToList();    

       } 
+0

可以讓我知道爲什麼usernames = context.counters.Select(m =>(m.UserName +「 - 」+ m.UserID))。GroupBy(g => g).Select (x => x.FirstOrDefault())。ToList(); ();(這也包括順序) – ChinnaR

+0

這是關於性能的所有內容(比如用戶名= context.counters.Select(m =>(m.UserName +「 - 」+ m.UserID))。Distinct .Distinct()將比較集合中的所有對象。另一方面,GroupBy()允許您通過某個鍵對對象進行分組。如果檢查查詢計劃,則可以檢查該對象。 – Ashiquzzaman

0

嘗試了這一點:

create table abc1 as 
select distinct concat(username,'-',userid) as result from abc 
group by username;