与其使用 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=>c.ActivityTask)
可能最终只有一条记录。您是否根据活动检查了后端联系人的确切总记录?
我成功地让单个活动出现,但是当添加任何其他活动时,由于我使用了 single() 而收到错误。我们显示的还有其他几个字段,我在这里复制了一个以供参考。此外,我在其中包含了活动任务,因为它是我想包含在结果中的另一个表中的一条数据。 Activitytask 是活动表上的外键。这有意义吗?
Include
不过滤,它只填充导航属性。
请把整个页面显示出来好吗?
【参考方案1】:
您必须在打开剃刀代码以呈现活动列表之间进行选择:
@foreach (var item in Activity)
<...
或使用.FirstOrDefault()
并仅渲染第一个。
问候。
【讨论】:
请注意:Include
在 Left Join 中转译,因此无法过滤您的结果。以上是关于与其使用 single() 返回表中的一项,如何返回与列表中相同 ID 绑定的多个项?的主要内容,如果未能解决你的问题,请参考以下文章
arcengine用c#开发怎么实现选择属性表中的一项属性平移至地图显示?
Python3 Tkinter基础 Menu 点击下拉菜单中的一项 这项前面出现对勾(不可以多选) add_radiobutton