gpt4 book ai didi

sql - linq 在两列上不同并作为单个字段返回

转载 作者:行者123 更新时间:2023-12-02 04:35:34 26 4
gpt4 key购买 nike

我有如下表格

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 列上应用 distinct 并将这两列作为 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 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();

}

关于sql - linq 在两列上不同并作为单个字段返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43516114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com