希望根据 属性 和列表中的值查询对象列表
Looking to query a list of objects based on a property and value in list
我将以下 JSON 放入对象列表中。每个对象都有一个 属性 和一个代码列表。我正在努力寻找一种方法来查询列表以查找特定公司的特定代码值。我最终是在寻找基于 Company/PayCode 的“AbsenceType”值。
这是我试图查看的内容,但没有用。寻找任何建议。
companyAbsenceType = AbsenceCodesList.First(c =>
(c.Company == companyCode) && (c.Codes.Find(x => x.PayCode == ppc.PayCode));
companyAbsenceType = AbsenceCodesList.Select(c =>
c.Company == companyCode && c.Codes.Find(x => x.PayCode == ppc.PayCode)).FirstOrDefault();
JSON:
[
{
"Company": "Company1",
"Codes": [
{
"PayCode": "SCK",
"AbsenceType": "Illness"
},
{
"PayCode": "VAC",
"AbsenceType": "Vacation"
},
{
"PayCode": "BRV",
"AbsenceType": "Bereavement"
},
{
"PayCode": "JUR",
"AbsenceType": "Jury Duty"
},
{
"PayCode": "PER",
"AbsenceType": "Personal"
}
]
},
{
"Company": " Company2",
"Codes": [
{
"PayCode": "SCK",
"AbsenceType": "Sick"
},
{
"PayCode": "VAC",
"AbsenceType": "Vacation"
},
{
"PayCode": "BRV",
"AbsenceType": "Bereavement"
},
{
"PayCode": "JUR",
"AbsenceType": "Jury Duty"
},
{
"PayCode": "PER",
"AbsenceType": "Personal"
},
{
"PayCode": "PRNU",
"AbsenceType": "Personal"
}
]
}
]
public class AbsenceCodes
{
public string Company { get; set; }
public List<AbsenceCode> Codes { get; set; }
}
public class AbsenceCode
{
public string PayCode { get; set; }
public string AbsenceType { get; set; }
}
更新
感谢 Moho 和 Eric Magers 向我指出了一个问题。来自 Moho 的查询有效。
var absenceType = AbsenceCodesList.FirstOrDefault(c => c.Company == companyCode && c.Codes.Any(x => x.PayCode == ppc.PayCode)) ? .Codes.First(c => c.PayCode == ppc.PayCode) ?.AbsenceType;
你很接近,过滤时使用 .Any
而不是 .Find
作为 Codes
:
var absenceType = AbsenceCodesList
// first find a valid top level item
.FirstOrDefault(c =>
// is specific company
c.Company == companyCode
// has the target paycode
&& c.Codes.Any(x => x.PayCode == ppc.PayCode))
// then select the desired value
?.Codes.First(c => c.PayCode == ppc.PayCode)
.AbsenceType;
我将以下 JSON 放入对象列表中。每个对象都有一个 属性 和一个代码列表。我正在努力寻找一种方法来查询列表以查找特定公司的特定代码值。我最终是在寻找基于 Company/PayCode 的“AbsenceType”值。 这是我试图查看的内容,但没有用。寻找任何建议。
companyAbsenceType = AbsenceCodesList.First(c =>
(c.Company == companyCode) && (c.Codes.Find(x => x.PayCode == ppc.PayCode));
companyAbsenceType = AbsenceCodesList.Select(c =>
c.Company == companyCode && c.Codes.Find(x => x.PayCode == ppc.PayCode)).FirstOrDefault();
JSON:
[
{
"Company": "Company1",
"Codes": [
{
"PayCode": "SCK",
"AbsenceType": "Illness"
},
{
"PayCode": "VAC",
"AbsenceType": "Vacation"
},
{
"PayCode": "BRV",
"AbsenceType": "Bereavement"
},
{
"PayCode": "JUR",
"AbsenceType": "Jury Duty"
},
{
"PayCode": "PER",
"AbsenceType": "Personal"
}
]
},
{
"Company": " Company2",
"Codes": [
{
"PayCode": "SCK",
"AbsenceType": "Sick"
},
{
"PayCode": "VAC",
"AbsenceType": "Vacation"
},
{
"PayCode": "BRV",
"AbsenceType": "Bereavement"
},
{
"PayCode": "JUR",
"AbsenceType": "Jury Duty"
},
{
"PayCode": "PER",
"AbsenceType": "Personal"
},
{
"PayCode": "PRNU",
"AbsenceType": "Personal"
}
]
}
]
public class AbsenceCodes
{
public string Company { get; set; }
public List<AbsenceCode> Codes { get; set; }
}
public class AbsenceCode
{
public string PayCode { get; set; }
public string AbsenceType { get; set; }
}
更新 感谢 Moho 和 Eric Magers 向我指出了一个问题。来自 Moho 的查询有效。
var absenceType = AbsenceCodesList.FirstOrDefault(c => c.Company == companyCode && c.Codes.Any(x => x.PayCode == ppc.PayCode)) ? .Codes.First(c => c.PayCode == ppc.PayCode) ?.AbsenceType;
你很接近,过滤时使用 .Any
而不是 .Find
作为 Codes
:
var absenceType = AbsenceCodesList
// first find a valid top level item
.FirstOrDefault(c =>
// is specific company
c.Company == companyCode
// has the target paycode
&& c.Codes.Any(x => x.PayCode == ppc.PayCode))
// then select the desired value
?.Codes.First(c => c.PayCode == ppc.PayCode)
.AbsenceType;