2017-04-20 31 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; 
相关问题