【问题标题】:Can't figure out the right linq query for this无法为此找出正确的 linq 查询
【发布时间】:2018-04-21 03:20:39
【问题描述】:

我想在我的数据网格视图框中生成一个列表。我有 userId,uId,我想首先使用 id 在数据库中搜索用户,然后显示用户对应的用户名和角色名。我怎样才能做到这一点? 下面,我尝试使用 UserId 搜索用户,但由于我是新手,所以我知道括号后的其余代码是不正确的。我可以在语法上使用一些帮助。谢谢

var list = _db.AspNetUserRoles.FirstOrDefault(w => w.UserId == uId)
            {
                w.AspNetUser.UserName,
                w.AspNetRole.Name
            });

            dataGridView1.DataSource = list;

【问题讨论】:

  • FirstOrDefault 不返回可枚举,它是单个项目。如果您想投影您需要使用Select 的项目,为什么要为单个用户的信息使用DataGrid?为什么不只是两个标签控件?
  • 感谢指正!我正在使用数据网格,因为我需要在添加到用户角色名称列表或任何其他更改时显示更改。

标签: c# sql asp.net winforms linq


【解决方案1】:

使用Where 子句代替FirstOrDefault,因为FirstOrDefault 返回序列的第一个元素。在Where 子句之后使用Select 创建一个具有UserNameName 属性的匿名类:

var list = _db.AspNetUserRoles.Where(w => w.UserId == uId).Select(w => new
            {
                UserName = w.AspNetUser.UserName,
                Name = w.AspNetRole.Name
            }).ToList();

dataGridView1.DataSource = list;

【讨论】:

  • @SlavenTojić,嘿 Slaven 很好,我错过了Select 子句。 +1 选择子句。今天学习了select子句的使用
【解决方案2】:

正如 lan Mercer 所说,FirstOrDefault 返回 first 或默认 (single) 值,如果您想要满足您提供的条件的元素列表,请使用 where .

var list = _db.AspNetUserRoles.Where(w => w.UserId == uId)
            {
                Uname = w.AspNetUser.UserName,
                Name = w.AspNetRole.Name
            });

            dataGridView1.DataSource = list;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2021-04-13
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多