Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Linq将对象属性转换为数组_C#_Asp.net Mvc_Linq - Fatal编程技术网

C#Linq将对象属性转换为数组

C#Linq将对象属性转换为数组,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个正在转换为JSON的对象,将由Ember.js使用。 目前我有一些完全展开的子对象,但ember希望 只是客户端上的一个ID数组。我怎样才能把这个物体展平 成为int[] items = Mapper.Map<IList<Item>>(client.GetItems()); foreach (var item in items) { int[] choices = item.Choices.Select(x => x.Id).ToArray();

我有一个正在转换为JSON的对象,将由Ember.js使用。 目前我有一些完全展开的子对象,但ember希望 只是客户端上的一个ID数组。我怎样才能把这个物体展平 成为
int[]

items = Mapper.Map<IList<Item>>(client.GetItems());
foreach (var item in items)
{
  int[] choices = item.Choices.Select(x => x.Id).ToArray();

  item.Choices = choices;
}
我想要生成的JSON

{ "items": [
   {
     "id": 0,
     "name": "Item0",
     "description": "...",
     "choices": [0, 1]
   },
   {
     "id": 1,
     "name": "Item1",
     "description": "...",
     "choices": [0, 1]
   }
]}

SelectMany
展平列表并生成包含所有项目的单个列表

items.SelectMany(x=>x.Choices.Select(y=>y.Id).ToArray()));
获取有关无法从IList转换为int[]类型的错误。如何强制转换该属性

不能将一种类型强制转换为另一种类型。相反,您可以在类中创建int[]类型的另一个属性,并在getter中使用LINQ语句(进行必要的验证检查)


问题就在这里:item.Choices=Choices;item.Choices是List类型,您正在尝试分配int[]类型的选项。是的,我如何才能绕过它而不创建一个全新的类,唯一的区别是Items是int[]而不是IList。我想更改此对象实例的属性类型。为什么不使用SelectMany?您不需要创建其他类,也无法更改属性类型。您可以在现有类中创建int[]类型的另一个属性,并在getter中使用linq语句。类似item.choiceId的东西?
SelectMany
在这里对您没有帮助。您需要创建一个新类,其中的选项定义为
int[]
,而不是
IList
items.SelectMany(x=>x.Choices.Select(y=>y.Id).ToArray()));
public int[] ChoiceIDs
{ 
    get {
     return this.Choices.Select(x => x.Id).ToArray();
    }
}