MVC的新手,并且几乎在应用程序中向后工作。我有一个实体ItemType,它有一个ItemIndicator类的外键。基本上我是在创建一个可编辑的网格,其中包含ItemType.code和ItemIndicator.description。当用户单击网格时,ItemIndicator字段显示可能的ItemIndicator.descriptions的dropDownList。在我的存储库中,我们有一个任务返回类型的异步任务,如下所示:
public async Task<PagedResults<ItemType>> GetAsync(int indId, int skip = 0, int take = -1)
{
PagedResults<ItemType> pagedResults;
try
{
IQueryable<ChargeType> query = _dbSet.Include("IndicatorDetails");
query = take == -1
? query.OrderBy(i => i.IndicatorDetails.Code)
: query.OrderBy(i => i.IndicatorDetails.Code);
var data = await query.ToListAsync();
pagedResults = new PagedResults<ItemType>(data, skip, take, data.Count);
}
catch (Exception e)
{
throw new Exception(string.Format("Could not get charge types from database. {0}", e.Message), e);
}
return pagedResults;
}
它有效,而且我实际上理解它。我们的想法是包括指标细节,其中包括我需要的指标描述。我的问题是第二项任务:
public async Task<ItemType> GetByIdAsync(int id)
{
return await _dbSet.FirstOrDefaultAsync(i => i.Id == id);
}
因此,第一个任务返回所有项目类型,以及相关的描述信息。我需要做的第二个任务几乎是一样的,我只需要一个ItemType及其相关的描述信息。由于我不期望多于一个结果,应该只返回一行,我很困惑如何重写表达式以在传入id时返回ItemDescription。我知道它可以工作PagedResults任务,因为它的类型为IQueryable,只是不知道如何为单行执行此操作。
很抱歉,如果这看起来很分散,立刻学习整个框架。提前谢谢。
答案 0 :(得分:2)
您应该可以使用.Include
,实体将在ItemType
和IndicatorDetails
之间建立正确的连接
public async Task<ItemType> GetByIdAsync(int id)
{
return await _dbSet.Include("IndicatorDetails").FirstOrDefaultAsync(i => i.Id == id);
}