c# - 使用 LINQ 获取 ID 列表并添加到数据库中

标签 c# asp.net-mvc database linq entity-framework

我有这个方法:

public ActionResult Complete(int id)
{
    // Validate customer owns this order
    bool isValid = storeDB.Orders.Any(
        o => o.OrderId == id &&
        o.Username == User.Identity.Name);

   bool CheckOrderValue = storeDB.Orders.Any(o => o.OrderId == id && o.Total == 0);
   int musicaID = storeDB.OrderDetails.Where(o => o.OrderId == id).Select(o => o.MusicaId).FirstOrDefault();

    if (isValid && CheckOrderValue)
    {
        int idUser = 0;
        if (Request.IsAuthenticated)
        {
            var membership = (WebMatrix.WebData.SimpleMembershipProvider)Membership.Provider;
            idUser = membership.GetUserId(User.Identity.Name);
        }

        var musicas = storeDB.Musicas.Where(x => x.MusicaId == musicaID)
                                     .Select(x => new { x.Nome, x.NomeArtista, x.genero, x.path })
                                     .ToList().First();

        var y = new UsuarioMusica()
        {
            UserId = idUser,
            MusicaId = musicaID,
            GeneroId = musicas.genero.GeneroId,
            genero = musicas.genero,
            Nome = musicas.Nome,
            NomeArtista = musicas.NomeArtista,
            path = musicas.path
        };
        if (ModelState.IsValid)
        {

            storeDB.UsuarioMusicas.Add(y);
            storeDB.SaveChanges();

        }

        return View(id);
    }
    else
    {
        return View("Error");
    }
}

我想在这一行获取一个 id 列表:

int musicaID = storeDB.OrderDetails.Where(o => o.OrderId == id)
                                   .Select(o => o.MusicaId).FirstOrDefault();

在此之后,我需要将每个 ID 添加到数据库中。

我认为我需要使用列表 musicaID 创建一个 foreach,但我不知道如何传递每个 ID 以添加到数据库中。

实际上,该方法只是添加第一个元素,我知道为什么,因为 FirstOrDefault 方法。

如何更改此设置以添加多个 ID?

最佳答案

您必须使用 foreach 循环并在添加所有元素时保存您的更改。例如这样:

public ActionResult Complete(int id)
{
    // Validate customer owns this order
    bool isValid = storeDB.Orders.Any(
        o => o.OrderId == id &&
        o.Username == User.Identity.Name);

    bool CheckOrderValue = storeDB.Orders.Any(o => o.OrderId == id && o.Total == 0);

    if (isValid && CheckOrderValue)
    {
        int idUser = 0;
        if (Request.IsAuthenticated)
        {
            var membership = (WebMatrix.WebData.SimpleMembershipProvider)Membership.Provider;
            idUser = membership.GetUserId(User.Identity.Name);
        }

        var musicaIDs = storeDB.OrderDetails.Where(o => o.OrderId == id).Select(o => o.MusicaId).ToList();

        foreach (var musicaId in musicaIDs)
        {
            var musicas = storeDB.Musicas.Where(x => x.MusicaId == musicaId)
                .Select(x => new { x.Nome, x.NomeArtista, x.genero, x.path }).ToList().First();

            var y = new UsuarioMusica()
            {
                UserId = idUser,
                MusicaId = musicaID,
                GeneroId = musicas.genero.GeneroId,
                genero = musicas.genero,
                Nome = musicas.Nome,
                NomeArtista = musicas.NomeArtista,
                path = musicas.path
            };

            if (ModelState.IsValid)
            {
                storeDB.UsuarioMusicas.Add(y);
            }
        }

        storeDB.SaveChanges();

        return View(id);
    }
    else
    {
        return View("Error");
    }
}

关于c# - 使用 LINQ 获取 ID 列表并添加到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240740/

相关文章:

c# - 反序列化错误: End of Stream encountered before parsing was completed

c# - 失败时获取 Debug.Assert 条件作为字符串

c# - 按降序排列学生

c# - TCP 客户端连接

asp.net - 关于如何在 ASP.NET MVC 4 中构建调度程序的指南

asp.net-mvc - 是否有 N 层的 Asp.net Mvc 示例应用程序?

mysql - 添加论坛 : sharing a database or creating a new one?

database - 在 Django 中使用数据库 View

c# - 如何将空值从 TextBox 插入到整数字段

asp.net-mvc - Asp.Net MVC 密码