Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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#_Linq_Casting - Fatal编程技术网

C#-Linq按其他属性在列表属性中选择

C#-Linq按其他属性在列表属性中选择,c#,linq,casting,C#,Linq,Casting,我的反应课 public class JSONResponse { public int return{ get; set; } public string[] message{ get; set; } public Data data{ get; set; } } public class Data { public Presence[] presences { get; set; } } public class Presence { public

我的反应课

public class JSONResponse
{
    public int return{ get; set; }
    public string[] message{ get; set; }
    public Data data{ get; set; }
}

public class Data
{
    public Presence[] presences { get; set; }
}

public class Presence
{
    public string id { get; set; }
    public string name{ get; set; }
    public Field[] fields { get; set; }
}

public class Field
{
    public string label{ get; set; }
    public string value { get; set; }
}
我的新班级

public class MyClass
{
    public int Id { get; set; }
    public string Name{ get; set; }
    public bool Temp{ get; set; }
}
在json类中,我有一些属性字段,它们有两个值(标签、值)

我希望转换到MyClass中,并根据字段的标签值设置临时属性获取value属性:

   MyClass myclass = JSONResponse.data.presences.Select(x => new MyClass()
    {
        Id = Convert.ToInt32(x.id),
        Name = x.name,
        Temp = x.fields.Where(a => a.label == "Label") // i want the value property
}).ToList();

使用
FirstOrDefault

Temp = x.fields.FirstOrDefault(a => a.label == "Label")?.Value

LINQ有一组函数将列表映射到该列表的单个条目。我认为对你来说最正确的选择是

var result=JSONResponse.data.presences.Select(x=>newmyclass()
{
Id=转换为32(x.Id),
Name=x.Name,
Temp=x.fields.SingleOrDefault(a=>a.label==“label”)?.Value,
});
我建议将
SingleOrDefault
置于
FirstOrDefault
之上的原因是
SingleOrDefault
在发现多个匹配项时引发异常。这样做,当存在重复标签时,您将得到一个异常,而不是可能的错误值