【问题标题】:Use a LINQ Query to return a list of of items from a database使用 LINQ 查询从数据库中返回项目列表
【发布时间】:2019-03-15 18:20:47
【问题描述】:

我希望编写一个非常简单的 LINQ 查询来列出我的数据库中的项目。这是我的模型的样子:

public class UsersContext : DbContext
  {
    public UsersContext()
      : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Membership> Membership { get; set; }
    public DbSet<Role> Roles { get; set; }

  }

  [Table("UserProfile")]
  public class UserProfile
  {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
  }

  [Table("webpages_Roles")]
  public class Role
  {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int RoleId { get; set; }
    public string RoleName { get; set; }
  }

这是我的控制器:

 public class AccountController : Controller
 {

  public ActionResult UserList(string username)
  {
    using (UsersContext db = new UsersContext())
    {
        var username = UserProfile.UserNames.ToList()
     ;
        return View(username)
    }

  }  

谁能告诉我这个查询应该如何工作。我真的希望能够以列表格式列出视图上的所有用户名

查看:

  @model IEnumerable<Comtrex_ICU.Models.UserProfile>


@{
    ViewBag.Title = "UserTable";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2 class="admin-home-link orange-titles">@Html.ActionLink("User 
Information", "AdminIndex")</h2>
<p>&nbsp;</p>

@foreach (var item in Model)
{

        <p></p>@Html.DisplayFor(modelItem => item.UserName)

}

【问题讨论】:

  • 您也可以发布 UserList 视图的代码吗?
  • 不应该是db.UserProfile.UserNames.ToList()吗?
  • 试试var usernames = db.UserProfiles.ToList();,型号应该是UserProfile
  • @WaelAbbas 成功了!这是我使用的代码: public ActionResult UserList(string UserName) { using (UsersContext db = new UsersContext()) { var model = db.UserProfiles.ToList();返回视图(模型); } }
  • 我觉得回答这些问题不好,我建议在继续之前回到基础,一个好的起点是this,尽量不要让它工作,尝试学习,如果将模型绑定到视图,请尝试查看 .net mvc 基础知识。

标签: c# asp.net-mvc linq model-view-controller


【解决方案1】:

db.UserProfiles 将返回UserProfiles 表中的所有行

所以你可以尝试var userProfiles = db.UserProfiles.ToList(); 来获取此行的列表,模型应该是@model IEnumerable&lt;Comtrex_ICU.Models.UserProfile&gt;

【讨论】:

  • 谢谢!我还添加了一个链接来显示用户的电子邮件地址。你知道如何做一个 item.Email)">@Html.DisplayFor(modelItem => item.Email) attr 以便当有人点击他们可以发送电子邮件从前景?
  • @MeganMeluskey 我想你想念: 电子邮件链接应该看起来像&lt;a href="mailto:@(item.Email)"&gt;Link&lt;/a&gt;
【解决方案2】:
public class AccountController : Controller
 {

  public ActionResult UserList(string username)
  {
    using (UsersContext db = new UsersContext())
    {
        var username = db.UserProfiles.Select(x => x.UserName ).ToList();
        return View(username)
    }    

  } 

【讨论】:

  • 我得到一个错误,说 Models.UerContext 不包含 UserProfile 的定义
  • @MeganMeluskey 我认为应该是UserProfiles,以匹配您在DbSet 上的属性名称。尽管当它返回字符串时,您的视图中也会遇到一些问题,并且它正在寻找Comtrex_ICU.Models.UserContexts。但这是一个步骤。
  • 请不要只发布代码。添加一些解释/cmets 以帮助 OP 理解您的答案
  • 效果更好,但现在我收到此错误消息传递到字典中的模型项的类型为“System.Collections.Generic.List1[System.String]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[Comtrex_ICU.Models.UserProfile]”。
  • 你能试试这个改变吗:var username = db.UserProfiles.Select(x =&gt; x.UserName ).ToList().AsEnumerable();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多