C# 使用LINQ,将表中的数据连接到多列表表单视图中的单行中
我有一个表格,每个“系统类型”收集两个总数,可以从下拉列表中选择(出于安全目的,我不得不混淆我的场景的细节,对不起。)C# 使用LINQ,将表中的数据连接到多列表表单视图中的单行中,c#,.net,entity-framework,linq,asp.net-core,C#,.net,Entity Framework,Linq,Asp.net Core,我有一个表格,每个“系统类型”收集两个总数,可以从下拉列表中选择(出于安全目的,我不得不混淆我的场景的细节,对不起。) var existingCounts = joinData.Select(r => new DySystemCountDto { ResourceCountId = r.ResourceCountId, Quantity = r.ResourceCount.Quantity,
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
用户可以添加任意数量的项目。每个都有一个AM计数和一个PM计数
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
表格如下:
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
我正在使用的数据库的结构如下:
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
无法更改架构
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
我需要用LINQ编写CRUD操作。我正在努力想出“Read”语法,只是为了将数据从表中获取到表单中。它需要被限制在Id为5及以上的系统中
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
如果没有AM/PM方面,每个系统只有一个数量,我可以使用我编写的以下代码:
public List<DySystemCountDto> GetDySystemCounts(int surveyId)
{
using (_context)
{
var joinData = _context.DySystemResourceCounts.Where(r => r.ResourceCount.SurveyId == surveyId)
.Include(r => r.ResourceCount)
.ToList();
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
return existingCounts;
}
}
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
public List GetDySystemCounts(int-surveyId)
{
使用(_上下文)
{
var joinData=\u context.DySystemResourceCounts.Where(r=>r.ResourceCount.SurveyId==SurveyId)
.Include(r=>r.ResourceCount)
.ToList();
var existingCounts=joinData.Select(r=>newdysystemcountdto
{
ResourceCountId=r.ResourceCountId,
数量=r.ResourceCount.Quantity,
DySystemId=r.DySystemId
}).ToList();
返回现有计数;
}
}
要在视图中使用此选项,请执行以下操作:
<tr>
<th>DySystem</th>
<th>Count</th>
<th></th>
</tr>
@{
for (var i = 0; i < Model.DySystemCounts.Count; i++)
{
var item = Model.DySystemCounts[i];
<tr>
<td>
<select class="form-control" asp-items="Model.DySystems"
asp-for="@Model.DySystemCounts[i].DySystemId"></select>
<td>
<input type="hidden" asp-for="@Model.DySystemCounts[i].ResourceCountId" />
<input class="form-control" asp-for="@Model.DySystemCounts[i].Quantity"/>
</td>
<td>
<a href="#" class="remove">Remove</a>
</td>
</tr>
}
}
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
系统失调
计数
@{
对于(变量i=0;i
然而,在混合使用AM/PM的情况下,我不知道如何使用它
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
那大概是。。对于每个不良系统的每个Am计数,也选择具有相同不良系统ID的Pm计数
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
我正在使用一个.Net核心API项目我从您的问题中得到的是,您想在中添加am/PM计数
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
因此,您的现有计数也应该包含AM/PM
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();
在我这方面无法进行测试,但这似乎会有所帮助。谢谢,这看起来确实很有趣,我一定会尝试!太好了,我非常感谢你!请注意,我需要在右侧的TempAMCount和TempAMCount之后添加.FirstOrDefault()
,才能使其工作,将最后一个let FinalAMCount
更改为let FinalPMCount
我还必须将AMCount和PMCount添加到我的模型中-尝试添加到我的DTO并使用它,但我没有获得同样的成功。很高兴知道这对您有效,是的,您需要将AMCount和PMCount添加到您的DTO中。计数将映射到这些。
var existingCounts = joinData.Select(r => new DySystemCountDto
{
ResourceCountId = r.ResourceCountId,
Quantity = r.ResourceCount.Quantity,
DySystemId = r.DySystemId
}).ToList();
var finalList = (from item in joinData
group item by item.DySystemId into g
let TempAMCount = g.Where(x=>x.IsAM==true)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().AMCount = TempAMCount
let TempPMCount = g.Where(x=>x.IsAM==false)
.Select(c => c.ResourceCount.Quantity)
let FinalAMCount = g.First().PMCount = TempPMCount
select g.First()
).ToList();