Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ,将表中的数据连接到多列表表单视图中的单行中_C#_.net_Entity Framework_Linq_Asp.net Core - Fatal编程技术网

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();