您好我有一个业务逻辑层,它将selectlistitems返回给控制器,然后传递给视图以填充选择列表。
我有这个方法有效:
public IEnumerable<SelectListItem> GetDevices
{
get
{
using (IDeviceData repository = _dataFactory.Create())
{
return repository.DeviceTypes.ToList()
.Where(dt => dt.ParentId == 10 )
.Select(dt =>
new SelectListItem
{
Text = (dt.Name).Trim(),
Value = dt.Id.ToString()
});
}
}
}
这不是:
public IEnumerable<SelectListItem> GetGroups(int deviceTypeId)
{
using (IDeviceData repository = _dataFactory.Create())
{
return repository.DeviceTypeConfigurationParameterGroupMaps.ToList()
.Where(cm => cm.DeviceTypeId == deviceTypeId)
.Join(repository.ConfigurationParameterGroups, cm => cm.ConfigurationParameterGroupId, cg => cg.Id, (cm, cg) => new { cm, cg })
.Select(cg =>
new SelectListItem
{
Text = (cg.cg.Name).Trim(),
Value = cg.cg.Id.ToString()
});
}
}
明显的区别是两个表之间的连接,我收到的错误是:
Results View = The type '<>f__AnonymousType0<p,d>' exists in both 'System.Web.dll' and 'EntityFramework.dll'
在尝试扩展调试结果时收到了这一点。任何建议都会受到欢迎,因为我对LINQ不太熟悉
答案 0 :(得分:1)
想出来:
public IEnumerable<SelectListItem> GetGroupsForDevice(int deviceTypeId)
{
using (IDeviceData repository = _dataFactory.Create())
{
return repository.DeviceTypeConfigurationParameterGroupMaps
.Where(cm => cm.DeviceTypeId == deviceTypeId)
.Join(repository.ConfigurationParameterGroups, cm => cm.ConfigurationParameterGroupId, cg => cg.Id, (cm, cg) => cg )
.ToList()
.Select(cg =>
new SelectListItem
{
Text = (cg.Name).Trim(),
Value = cg.Id.ToString()
}).ToList() ;
}
}
我需要在加入后添加ToList()
,然后在转换为SelectlistItem后再添加{{1}}。我也不需要创建新的匿名类型 - 感谢上面的joanna。
这是答案,但不是一个很好的解释,如果有人想要填写一点,请随意!