c# - 使用数据表 c# 上的查询表达式未获取预期数据

标签 c# linq datatable

我想创建一个出现在一个数据表“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/

相关文章:

c# - 如何在 LINQ WHERE 语句中使用 OR 运算符

c# - NullReferenceException 而涉及的对象是有效的

javascript - DataTable 如何防止在包含超链接的列中单击行

c# - 给定边界框和一条线(两点),确定线是否与框相交

c# - OAuthWebSecurity.RegisterMicrosoftClient 的错误请求 (400)

c# - 停用后执行 Windows Phone 8.1 应用程序

c# - 选择分组结果

c# - 错误 CS1014 : A get or set accessor expected

c# - 基于条件的Linq查询

c# - 从 LinqDataSource 填充 DataTable