我想创建一个出现在一个数据表“StatsTable”中的用户排序列表。
我需要从 StatsTable 中获取用户 ID,然后使用它在另一个数据表“UserTable”中查找用户名。当我有了这些时,我想将 userID 作为键,将 UserName 作为排序列表中的值。
我设法获取了用户 ID 并将其添加到排序列表中,但用户名以“System.Data.EnumerableRowCollection`1[System.String]”的形式出现。
我做错了什么?感谢您的帮助。
SortedList UserList = new SortedList();
List<double> listofUserIDs = StatsTable.AsEnumerable()
.Select(uid => uid.Field<double>("UserID")).ToList<double>();
foreach (double UID in listofUserIDs)
{
string userName = UserTable.AsEnumerable()
.Where(id => double.Equals(id.Field<double>("UserID"), UID))
.Select(name => name.Field<string>("First_Name") + " " + name.Field<string>("Last_Name")).ToString();
UserList[UID] = userName;
}
最佳答案
你应该使用 Enumerable.Join
链接两个表并选择您需要的内容。在这种情况下,我会使用 Tuple<int, string>
而 int
是 UserID(带小数位的 UserID 没有意义,对吗?)字符串是用户名:
var query = from rStats in StatsTable.AsEnumerable()
join rUser in UserTable.AsEnumerable()
on rStats.Field<int>("UserID") equals rUser.Field<int>("UserID")
select new {
UserID = rStats.Field<int>("UserID"),
UserName = string.Format("{0} {1}"
, rUser.Field<string>("First_Name")
, rUser.Field<string>("Last_Name"))
};
List<Tuple<int, string>> users = query
.OrderBy(u => u.UserName)
.Select(u => Tuple.Create(u.UserID, u.UserName))
.ToList();
您可以通过 Item
访问元组属性:
foreach(var user in users)
Console.WriteLine("UserID:{0} UserName:{1}",user.Item1,user.Item2);
关于c# - 使用数据表 c# 上的查询表达式未获取预期数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950933/