选择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对象的列表。

此对象具有属性NameId。在我添加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");

选择ListItem并linq any,然后选择语句

将查询更改为

 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");