【发布时间】:2018-02-15 18:59:41
【问题描述】:
我有一些从 API 调用中以 JSON 形式检索的数据。数据被检索并转换为对象,但我无法可靠地访问我需要的数据。我需要查询对象以确定值是否存在,但是当值不存在时,我会收到各种错误消息。我正在尝试选择第一个 ColData 等于给定字符串的行。
// When the string does not exist I get
// Specified argument was out of the range of valid values.
var t1 = PriorMonthTB.Rows.Row.Where( d => d.ColData[ 0 ].Value.Contains( "sdfasfd" ) ).Any();
var t2 = PriorMonthTB.Rows.Row.FirstOrDefault( d => d.ColData[ 0 ].Value.Contains( "sdfasfd" ) );
var t3 = PriorMonthTB.Rows.Row.Any( d => d.ColData[ 0 ].Value.Contains( "sdfasfd" ) );
var t5 = PriorMonthTB.Rows.Row.Where( r => r.ColData[ 0 ].Value == "sdfasfd" ).FirstOrDefault().ColData.FirstOrDefault().Value;
这有效……有时。这在一个循环内运行。第一次迭代有效,但后续迭代返回“false”,即使它们应该返回 true。
var t4 = PriorMonthTB.Rows.Row.Select( d => d.ColData[ 0 ].Value.Contains( "sdfasfd" ) ).FirstOrDefault();
其他尝试给Sequence contains no elements。
我要查询的对象看起来像这样
public partial class TrialBalance : RealmObject
{
[JsonProperty( "Header" )]
public Header Header { get; set; }
[JsonProperty( "Columns" )]
public Columns Columns { get; set; }
[JsonProperty( "Rows" )]
public Rows Rows { get; set; }
}
public partial class Columns : RealmObject
{
[JsonProperty( "Column" )]
public IList<Column> Column { get; }
}
public partial class Column : RealmObject
{
[JsonProperty( "ColTitle" )]
public string ColTitle { get; set; }
[JsonProperty( "ColType" )]
public string ColType { get; set; }
}
public partial class Header : RealmObject
{
[JsonProperty( "Time" )]
public DateTimeOffset Time { get; }
[JsonProperty( "ReportName" )]
public string ReportName { get; set; }
[JsonProperty( "DateMacro" )]
public string DateMacro { get; set; }
[JsonProperty( "ReportBasis" )]
public string ReportBasis { get; set; }
[JsonProperty( "StartPeriod" )]
public DateTimeOffset StartPeriod { get; set; }
[JsonProperty( "EndPeriod" )]
public DateTimeOffset EndPeriod { get; set; }
[JsonProperty( "Currency" )]
public string Currency { get; set; }
[JsonProperty( "Option" )]
public IList<Option> Option { get; }
}
public partial class Option : RealmObject
{
[JsonProperty( "Name" )]
public string Name { get; set; }
[JsonProperty( "Value" )]
public string Value { get; set; }
}
public partial class Rows : RealmObject
{
[JsonProperty( "Row" )]
public IList<Row> Row { get; }
}
public partial class Row : RealmObject
{
[JsonProperty( "ColData" )]
public IList<RowColDatum> ColData { get; }
[JsonProperty( "Summary" )]
public Summary Summary { get; set; }
[JsonProperty( "type" )]
public string Type { get; set; }
[JsonProperty( "group" )]
public string Group { get; set; }
}
public partial class RowColDatum : RealmObject
{
[JsonProperty( "value" )]
public string Value { get; set; }
[JsonProperty( "id" )]
public string Id { get; set; }
}
public partial class Summary : RealmObject
{
[JsonProperty( "ColData" )]
public IList<SummaryColDatum> ColData { get; }
}
public partial class SummaryColDatum : RealmObject
{
[JsonProperty( "value" )]
public string Value { get; set; }
}
我不认为这会如此令人头疼,但我无法让它发挥作用。谁能告诉我我做错了什么?
【问题讨论】:
-
什么是返回真或假?此外,如果您打算选择 d.ColData[ 0 ].Value.Contains( "sdfasfd" ) 的第一行或默认行,最好执行 PriorMonthTB.Rows.Row.FirstOrDefault( d => d.ColData[ 0 ] .Value.Contains("sdfasfd"));
-
你试过用 FirstOrDefault 代替 ColData[0] 吗?
-
@touchofevil 我试过
var t1 = PriorMonthTB.Rows.Row.FirstOrDefault( d => d.ColData[ 0 ].Value.Contains( "sdfasfd" ) );,我得到Specified argument was out of the range of valid values. Parameter name: Get from RealmList index:0 beyond range of:0 -
@user6144226 我试过了,错误是
Object reference not set to an instance of an object. -
@mack - 是的,想了很多,你需要投资大量的空条件运算符(几乎在每个点上) - 这不是走的路。您的数据根本不包含 ColData 有多合理?您是否反序列化了正确的对象?