Asp.net mvc 4 缩小查询范围以用作实体框架MVC3中SelectList的源

Asp.net mvc 4 缩小查询范围以用作实体框架MVC3中SelectList的源,asp.net-mvc-4,entity-framework-4,selectlist,Asp.net Mvc 4,Entity Framework 4,Selectlist,我有一些拥有大约20个属性的大型实体,在某些情况下,我需要从中创建DropDownList。在SelectList中,您只使用查询返回的原始20个属性中的2个属性(ID和名称)作为结束 我正在使用此方法加载此文件: new SelectList(db.Contacts.AsNoTracking()。其中(x=>x.idTenant==CurrentTenantID),“ContactId”,“Name”) 这很好,但是Contacts数据库集上的查询显然返回了所有列如何将列从20缩小到2,以便对

我有一些拥有大约20个属性的大型实体,在某些情况下,我需要从中创建DropDownList。在SelectList中,您只使用查询返回的原始20个属性中的2个属性(ID和名称)作为结束

我正在使用此方法加载此文件:

new SelectList(db.Contacts.AsNoTracking()。其中(x=>x.idTenant==CurrentTenantID),“ContactId”,“Name”)

这很好,但是Contacts数据库集上的查询显然返回了所有列如何将列从20缩小到2,以便对数据库进行更轻松的查询?

我知道我可以为这种情况在数据库中执行存储过程或视图,并将其用于DropDownList填充,但。。。还有另一种直接使用实体框架的方法吗


这发生在多个实体中,而不仅仅是联系人,因此我希望有一个明确的策略来处理此场景。

您可以添加一个
。选择
到您的查询中:

new SelectList(db.Contacts.AsNoTracking()
    .Where(x => x.idTenant == CurrentTenantID)
    .Select(x => new { x.ContactId, x.Name })
    , "ContactId", "Name");

+这正是你应该做的。使用select创建一个投影,将一个集合转换为另一个集合,在本例中,将一组列/值转换为较少的列/值。