将IQueryable对象转换为List并添加新Item

时间:2017-11-08 02:51:28

标签: asp.net

我有以下IQueryable对象:

        var user = from d in _context.Users
        join userRole in _context.UserRoles on d.Id equals userRole.UserId
        join role in _context.Roles on userRole.RoleId equals role.Id
        where role.Name == "Liquidador"
        select d;

然后将其作为ViewBag发送到视图:

        ViewBag.UserID = new SelectList(user.AsNoTracking(), "UserName", "Name", selectedUser);

问题:

我需要在IQueryable的结果中添加一个新Item。所以我这样做了:

var UserNameList = user.Select(s => new { s.Name, s.UserName }).ToList();

但是,当我尝试添加新项目时,我错过了一些内容:

UserNameList.Insert(0, new *NewWhat?* { Name = "Liquidador", UserName = "--Select--"} );

通常我会声明特定模型的新元素,但在这种情况下,我不知道要为此IQueryable声明哪个模型。任何推荐?

由于

编辑:

IQueryable对象作为函数的一部分转到View的Get方法:

    public async Task<IActionResult> Management()
    {
        PopulateUserDropDownList();

        var Tiendas = await _context.Stores.ToListAsync();
        StoreEmployee model = new StoreEmployee
        {
            Stores = Tiendas
        };

        return View(model);
    }

此列表随后显示在表格内的下拉列表中:

        <td class="col-md-2">
            <div class="form-group" form="@(String.Format("{0}{1}","form",item.StoreID))">
               <div>
                <select asp-for="@item.Usuario" class="form-control" asp-items="ViewBag.UserId" form="@(String.Format("{0}{1}","form",item.StoreID))"></select>
                <span asp-validation-for="@item.Usuario" class="text-danger"></span>
               </div>
            </div>
        </td>

1 个答案:

答案 0 :(得分:0)

如果你定义一个类UserDTO(或任何其他更喜欢你的名字),它似乎会更清晰。

public class UserDTO
{
    public string Name { get; set; }
    public string UserName { get; set; }
}

然后你做

var UserNameList = user
  .Select(s => new UserDTO { Name = s.Name, UserName = s.UserName })
  .ToList();

UserNameList.Insert(0, new UserDTO { Name = "Liquidador", UserName = "--Select--"} );

OTOH ...稍微添加空元素作为数据数组的一部分,我的建议是在剃刀视图上处理它,然后发送UserNameList真实数据。 Dropdown razor方法包含重载以指定空元素文本。

如果您展示HTML,我们可能会帮助您实施更好的解决方案。