与其使用 single() 返回表中的一项,如何返回与列表中相同 ID 绑定的多个项?

Posted

技术标签:

【中文标题】与其使用 single() 返回表中的一项,如何返回与列表中相同 ID 绑定的多个项?【英文标题】:Instead of using single() to return one item in a table, how can I return multiple items tied to the same ID in a list? 【发布时间】:2021-09-09 19:43:12 【问题描述】:

我正在创建一个联系人管理数据库作为一个项目,并使用剃须刀页面创建了联系人和活动表。在单个联系人的页面上,我想返回与其 ID 相关的所有活动的列表,而不仅仅是单个活动。这是我的设置方式:

public Contact Contact  get; set; 
public List<Activity> Activity  get; set; 

public async Task<IActionResult> OnGetAsync(int? id)

    if (id == null)
    
        return NotFound();
    

    Contact = await _context.Contact
        .Include(c => c.Location)
        .Include(c => c.Role)
        .Include(c => c.State).FirstOrDefaultAsync(m => m.ContactID == id);

    Activity = await _context.Activity
        .Include(c => c.ActivityTask)
        .Where(m => m.ContactID == id)
        .ToListAsync();

    if (Contact == null)
    
        return NotFound();
    
    return Page();

然后我调用每个项目显示如下:

<dt class="col-sm-2">
    @html.DisplayNameFor(model => model.Activity.Single().Status)
</dt>
<dd class="col-sm-10">
    @Html.DisplayFor(model => model.Activity.Single().Status)
</dd>

显然 single 会抛出异常,但我不确定用什么替换它。我想可能是 Where() 或 FindAll() 但在我当前的设置中都不起作用。

【问题讨论】:

因为您使用ActivityTask 进行过滤,即.Include(c=&gt;c.ActivityTask) 可能最终只有一条记录。您是否根据活动检查了后端联系人的确切总记录? 我成功地让单个活动出现,但是当添加任何其他活动时,由于我使用了 single() 而收到错误。我们显示的还有其他几个字段,我在这里复制了一个以供参考。此外,我在其中包含了活动任务,因为它是我想包含在结果中的另一个表中的一条数据。 Activitytask 是活动表上的外键。这有意义吗? Include 不过滤,它只填充导航属性。 请把整个页面显示出来好吗? 【参考方案1】:

您必须在打开剃刀代码以呈现活动列表之间进行选择:

@foreach (var item in Activity)

    <...

或使用.FirstOrDefault() 并仅渲染第一个。

问候。

【讨论】:

请注意:Include 在 Left Join 中转译,因此无法过滤您的结果。

以上是关于与其使用 single() 返回表中的一项,如何返回与列表中相同 ID 绑定的多个项?的主要内容,如果未能解决你的问题,请参考以下文章

arcengine用c#开发怎么实现选择属性表中的一项属性平移至地图显示?

只知道某个SQL数据库表的一项内容,如何查询它所在的数据表

SQL查询从多个表返回数据

如何使用mysql join从最右边的表中只返回一行

Python3 Tkinter基础 Menu 点击下拉菜单中的一项 这项前面出现对勾(不可以多选) add_radiobutton

表中的一列值有字符和数字,如何将两者通过查询筛选出来