Linq查询数组中的foreach元素

时间:2014-12-01 17:34:33

标签: c# arrays asp.net-mvc linq

我有一个带有ActionResult的Controller,它从HttpPost的视图中获取三个数组。 数组是Id(tableId)从顶部开始的位置(positionY)和从左边开始的位置(positionX)。 单击“保存”时,ActionResult需要更新数据库中相应ID的所有位置。

这是我的控制器:

private BonTempsDbContext db = new BonTempsDbContext();

[HttpPost]
public ActionResult Index(int[] tableId, int[] tablePosX, int[] tablePosY)
{
    int i = 0;
    foreach (var id in tableId)
    {
        int number = tableId[i];
        Tafel tafel = db.Tafel
            .Where(x => x.id == number)
            .ToList();
        db.Entry(tafel).State = EntityState.Modified;
        i++;
    }
    return View(db.Tafel.ToList());
}

我收到错误:

  

无法隐式转换类型   'System.Collections.Generic.List'到   'BonTempsMVC.Tafel'

这是我的观点,如果你从中得到一些有用的东西。

@model IEnumerable<BonTempsMVC.Tafel>

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}


<h2>Index</h2>
<div class="VoegToeBtn">
    <a href="/tafel/create">
        <span class="btn btn-default">
            <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Maak nieuw menu aan
        </span>
    </a>
</div>
@using (Html.BeginForm())
    {
    @Html.AntiForgeryToken()

    <div id="tablewrapper">

                @foreach (var item in Model)
                {
                    var positionXId = "posX" + item.id;
                    var positionYId = "posY" + item.id;
                    <div class="draggable ui-widget-content" id="@Html.DisplayFor(ModelItem => item.id)">
                        <input type="text" hidden name="tableId" value="@Html.DisplayFor(ModelItem => item.id)" />
                        <input type="text" hidden name="tablePosX" id="@positionXId" value="" />
                        <input type="text" hidden name="tablePosY" id="@positionXId" value="" />
                        <p>@Html.DisplayFor(ModelItem => item.tafelNaam)</p>
                    </div>

                }
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
}
<script>
$(".draggable").draggable({
    snap: ".draggable",
    snapMode: "outer",
    stop: function (event, ui) {
        var finalOffset = $(this).offset();
        var finalxPos = finalOffset.left;
        var finalyPos = finalOffset.top;
        var itemId = $(this).attr('id');
        var posXid = "posX" + itemId;
        var posYid = "posY" + itemId;
        $('input:text[id="' + posXid + '"]').attr("value", finalxPos);
        $('input:text[id="' + posYid + '"]').attr("value", finalyPos);
    },
});
</script>

和tafel模型:

namespace BonTempsMVC
{
    public class Tafel
    {
        public int id { get; set; }

        public string tafelNaam { get; set; }

        public bool beschikbaar { get; set; }

        public float positionY { get; set; }

        public float positionX { get; set; }
    }
}

1 个答案:

答案 0 :(得分:3)

试试这个: -

 List<Tafel> tafel = db.Tafel
                .Where(x => x.id == number)
                .ToList();

此处返回List<Tafel>,但您将其存储在Tafel对象中。
如果您非常确定在Tafel实体中只有一个匹配id的项目,请执行以下操作: -

Tafel tafel = db.Tafel.FirstOrDefault(x => x.id == number);

正如@DavidG建议你也可以这样做: -

Tafel tafel = db.Tafel.Find(number);