我有一张桌子如下
Id username userid departmentname
1 abc 1234 test1
2 abc 3456 test1
3 abc 1234 test2
4 abc 3456 test2
5 def 8989 test1
我想对username和userid列应用不同的字段,并将这两列作为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)一旦获得所需的结果,就需要过滤以输入字符串(前缀文本)开头的列表。我已经在变量abc中获得了所需的结果,并且能够获取以输入字符串开头的列表,但是我得到的错误是“无法将匿名类型列表隐式转换为列表字符串。如何将列表匿名类型转换为列表字符串?2)以上方法更好吗?还是有什么比这更好的方法了?
谢谢“ Ashique”,我没有在另一行代码中使用group by,但如下所示。
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();
您可以尝试以下方法:
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();
}
要么
using (DBEntities context = new DBEntities())
{
usernames = context.counters.Select(m => (m.UserName + "-" + m.UserID )).GroupBy(g => g).Select(x => x.FirstOrDefault()).ToList();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句