最小化 .NET 代码或使其更高效
Minimizing .NET code or make it more efficient
我正在为具有 5 个插槽的产品开发电子储物柜系统的概述。
我想要实现的是自动填充每个“储物柜插槽”的下拉菜单和 select 每个插槽中的正确产品。
也可以有多个储物柜,所以我不知道最好最有效的方法。
Index.cshtml
@foreach (var locker in Model.Lockers)
{
<div class="lockBox slot1 unavailible">
<div>
<select asp-items="Model.OptionSlot1">
<option value="">– Empty slot –</option>
</select>
</div>
1
</div>
<div class="lockBox slot2 unavailible">
<div>
<select asp-items="Model.OptionSlot2">
<option value="">– Empty slot –</option>
</select>
</div>
2
</div>
<div class="lockBox slot3 unavailible">
<div>
<select asp-items="Model.OptionSlot3">
<option value="">– Empty slot –</option>
</select>
</div>
3
</div>
<div class="lockBox slot4 unavailible">
<div>
<select asp-items="Model.OptionSlot4">
<option value="">– Empty slot –</option>
</select>
</div>
4
</div>
<div class="lockBox slot5 unavailible">
<div>
<select asp-items="Model.OptionSlot5">
<option value="">– Empty slot –</option>
</select>
</div>
5
</div>
}
Index.cshtml.cs
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Lockers = await LockerManager.GetLockers(userId);
Products = await ProductManger.GetProducts(userId);
Box = await BoxManager.GetBoxes(userId);
var box1 = Box.Where(a => a.BoxNo == 1).ToList()[0];
var prod1 = Products.Where(p => p.Id == box1.ProductId).ToList()[0];
OptionsSlot1 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box1.ProductId == prod1.Id ? true : false
}).ToList();
var box1 = Box.Where(a => a.BoxNo == 1).ToList()[0];
var prod1 = Products.Where(p => p.Id == box1.ProductId).ToList()[0];
OptionsSlot1 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box1.ProductId == prod1.Id ? true : false
}).ToList();
var box2 = Box.Where(a => a.BoxNo == 2).ToList()[0];
var prod2 = Products.Where(p => p.Id == box2.ProductId).ToList()[0];
OptionsSlot2 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box2.ProductId == prod2.Id ? true : false
}).ToList();
var box3 = Box.Where(a => a.BoxNo == 3).ToList()[0];
var prod3 = Products.Where(p => p.Id == box3.ProductId).ToList()[0];
OptionsSlot3 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box3.ProductId == prod3.Id ? true : false
}).ToList();
var box4 = Box.Where(a => a.BoxNo == 4).ToList()[0];
var prod4 = Products.Where(p => p.Id == box4.ProductId).ToList()[0];
OptionsSlot4 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box4.ProductId == prod4.Id ? true : false
}).ToList();
var box5 = Box.Where(a => a.BoxNo == 5).ToList()[0];
var prod5 = Products.Where(p => p.Id == box5.ProductId).ToList()[0];
OptionsSlot5 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box5.ProductId == prod5.Id ? true : false
}).ToList();
我现在已经能够将它缩小到一个循环。如果其他人有兴趣,这里是代码:
IList<int> boxes = new List<int> { 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 };
foreach (var boxNo in boxes)
{
var box = Model.Box.Where(a => a.BoxNo == boxNo && a.LockerId == locker.Id).ToList()[0];
var status = (Model.Box.Where(x => x.BoxNo == boxNo && x.LockerId == locker.Id).ToList()[0].Status) == 1 ? "availible" : "unavailible";
if (boxNo == 1 || boxNo == 2)
status = "locked";
<div class="box @status" id="box@(boxNo)">
<div>
<select name="@(locker.Id + "_" + @boxNo)" id="@(locker.Id + "_" + @boxNo)">
<option value="0">–</option>
@foreach (var product in Model.Products)
{
<option value="@product.Id" selected="@(box.ProductId == product.Id)">@product.Name</option>
}
</select>
</div>
@boxNo
</div>
}
我正在为具有 5 个插槽的产品开发电子储物柜系统的概述。 我想要实现的是自动填充每个“储物柜插槽”的下拉菜单和 select 每个插槽中的正确产品。
也可以有多个储物柜,所以我不知道最好最有效的方法。
Index.cshtml
@foreach (var locker in Model.Lockers)
{
<div class="lockBox slot1 unavailible">
<div>
<select asp-items="Model.OptionSlot1">
<option value="">– Empty slot –</option>
</select>
</div>
1
</div>
<div class="lockBox slot2 unavailible">
<div>
<select asp-items="Model.OptionSlot2">
<option value="">– Empty slot –</option>
</select>
</div>
2
</div>
<div class="lockBox slot3 unavailible">
<div>
<select asp-items="Model.OptionSlot3">
<option value="">– Empty slot –</option>
</select>
</div>
3
</div>
<div class="lockBox slot4 unavailible">
<div>
<select asp-items="Model.OptionSlot4">
<option value="">– Empty slot –</option>
</select>
</div>
4
</div>
<div class="lockBox slot5 unavailible">
<div>
<select asp-items="Model.OptionSlot5">
<option value="">– Empty slot –</option>
</select>
</div>
5
</div>
}
Index.cshtml.cs
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Lockers = await LockerManager.GetLockers(userId);
Products = await ProductManger.GetProducts(userId);
Box = await BoxManager.GetBoxes(userId);
var box1 = Box.Where(a => a.BoxNo == 1).ToList()[0];
var prod1 = Products.Where(p => p.Id == box1.ProductId).ToList()[0];
OptionsSlot1 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box1.ProductId == prod1.Id ? true : false
}).ToList();
var box1 = Box.Where(a => a.BoxNo == 1).ToList()[0];
var prod1 = Products.Where(p => p.Id == box1.ProductId).ToList()[0];
OptionsSlot1 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box1.ProductId == prod1.Id ? true : false
}).ToList();
var box2 = Box.Where(a => a.BoxNo == 2).ToList()[0];
var prod2 = Products.Where(p => p.Id == box2.ProductId).ToList()[0];
OptionsSlot2 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box2.ProductId == prod2.Id ? true : false
}).ToList();
var box3 = Box.Where(a => a.BoxNo == 3).ToList()[0];
var prod3 = Products.Where(p => p.Id == box3.ProductId).ToList()[0];
OptionsSlot3 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box3.ProductId == prod3.Id ? true : false
}).ToList();
var box4 = Box.Where(a => a.BoxNo == 4).ToList()[0];
var prod4 = Products.Where(p => p.Id == box4.ProductId).ToList()[0];
OptionsSlot4 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box4.ProductId == prod4.Id ? true : false
}).ToList();
var box5 = Box.Where(a => a.BoxNo == 5).ToList()[0];
var prod5 = Products.Where(p => p.Id == box5.ProductId).ToList()[0];
OptionsSlot5 = Products.Select(a => new SelectListItem
{
Value = a.Id.ToString(),
Text = a.Name,
Selected = box5.ProductId == prod5.Id ? true : false
}).ToList();
我现在已经能够将它缩小到一个循环。如果其他人有兴趣,这里是代码:
IList<int> boxes = new List<int> { 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 2, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 };
foreach (var boxNo in boxes)
{
var box = Model.Box.Where(a => a.BoxNo == boxNo && a.LockerId == locker.Id).ToList()[0];
var status = (Model.Box.Where(x => x.BoxNo == boxNo && x.LockerId == locker.Id).ToList()[0].Status) == 1 ? "availible" : "unavailible";
if (boxNo == 1 || boxNo == 2)
status = "locked";
<div class="box @status" id="box@(boxNo)">
<div>
<select name="@(locker.Id + "_" + @boxNo)" id="@(locker.Id + "_" + @boxNo)">
<option value="0">–</option>
@foreach (var product in Model.Products)
{
<option value="@product.Id" selected="@(box.ProductId == product.Id)">@product.Name</option>
}
</select>
</div>
@boxNo
</div>
}