MVC再次使用外键返回实体

时间:2015-06-10 14:44:23

标签: c# asp.net-mvc entity-framework

我正在尝试返回一个有外键的实体而且我有点卡住了。尝试使用两个表的结果填充dropDownList。 ItemType和IndicatorType表之间存在外键关系。

代码是:

public async Task<PagedResults<ItemType>> GetAsync(int skip = 0, int take = -1)
{
    PagedResults<ItemType> pagedResults;
    try
    {
        IQueryable<ItemType> 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 item types from database. {0}", e.Message), e);
    }
    return pagedResults;
}

我可以让它只用于返回一行,因为我传入一个我可以在ItemType和IndicatorType类之间匹配的id,但是我无法弄清楚如何让_dbSet来做包含IndicatorDetails。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以随时加入两个表来进行查询 例如( j1 ItemType j2 IndicatorType

ViewBag.listItems = ItemType.Join(IndicatorType, j1 => j1.key, j2 => j2.key2, (j1, j2) => new {j1, j2}).AsEnumerable().Select( v => new SelectListItem() { Value = t.t1.userid.ToString(), Text = string.Format("{0} {1}", t.t1.firstName, t.t2.lastName) });

在视图中,您可以传递 ViewBag.listItems

@Html.DropDownListFor(m => m.userid, new SelectList(ViewBag.listItems,"Value","Text","-Sélections-"), new { @class ="form-control"})