选择ListItem并linq any,然后选择语句
本文关键字:选择 然后 语句 linq ListItem any | 更新日期: 2023-09-27 18:26:11
My CarFormat对象具有Name和Id属性。我正在获取ClientId等于我在方法内部传递的carformat的所有carformat。我喜欢这个
var carFormats = this.carRepository.All()
.Where(x => x.CarFormat.Any(c => c.Car.Id == someVar.CarId))
.Select(x=>x.CarFormat).AsEnumerable();
这将返回CarFormat对象的列表。
此对象具有属性Name
和Id
。在我添加SelectListItemCarFormats作为视图模型中的属性后,我试图将这个可枚举的资源列表绑定到选择列表中
myViewModel.CarFormats = new SelectList(carFormats, "Id", "Name");
但我得到了数据绑定异常databinding:`
'System.Collections.ObjectModel.ReadOnlyCollection1[[xxxxx,xxxxxx,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]'不包含名为"name"的属性。
当我投影到只使用列表中的第一个项目时,一切都正常,除了我需要所有对象都这样,而不仅仅是第一个
myViewModel.CarFormats = new SelectList(carFormats.First(), "Id", "Name");
将查询更改为
var carFormats = this.carRepository.All()
.Where(x => x.CarFormat.Any(c => c.Car.Id == someVar.CarId))
.SelectMany(x=>x.CarFormat).AsEnumerable();
使用SelectMany
一些资源
- Linq-SelectMany Confusion
- Select和SelectMany之间的区别
类中的属性是一个单独的选择列表项:
SelectListItem CarFormats
这就是为什么当您对集合调用.First()时它会起作用。
您正试图将其设置为多个项目的值:
myViewModel.CarFormats = new SelectList(carFormats, "Id", "Name");
将视图模型类中的属性设置为选择列表:
public SelectList CarFormats { get; set; }
我想您只是缺少一个.ToList()
myViewModel.CarFormats=新SelectList(CarFormats.ToList(),"Id","Name");