我有一个查询
row.GetChildRows("EventCategoryRelation")
.Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString())
.Select(x => Int32.Parse(x["category_id"].ToString()))
此查询返回IEnumerable。我期待'int'
帮我修改我的LINQ查询
答案 0 :(得分:2)
如果您希望查询仅返回单个值,请使用Single扩展名方法。
row.GetChildRows("EventCategoryRelation")
.Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString())
.Select(x => Int32.Parse(x["category_id"].ToString()))
.Single();
请注意,如果没有值,Single将抛出异常。如果那不是您想要的,请使用SingleOrDefault。
答案 1 :(得分:1)
您始终可以将其添加到查询的末尾:
.Single();
如果您的枚举只包含一个值,那么它将返回一个值,如果它包含的数量超过一个则抛出异常。
答案 2 :(得分:0)
根据您的数据添加.FirstOrDefault
,.SingleOrDefault()
,.First()
等。
ow.GetChildRows("EventCategoryRelation")
.Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString())
.Select(x => Int32.Parse(x["category_id"].ToString())).FirstOrDefault()
当您期望多行时,如果没有返回数据,如果您不想要异常,请使用First(FirstOrDefault
)。多行会在Single
或SingleOrDefault
上抛出异常。
答案 3 :(得分:0)
在查询中添加First()
子句:
row.GetChildRows("EventCategoryRelation")
.Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString())
.Select(x => Int32.Parse(x["category_id"].ToString()))
.First()
如果没有结果,您可能希望使用FirstOfDefault()
,因为First()
会在这种情况下抛出异常。
答案 4 :(得分:0)
仅SingleOrDefault()
代替Select()
,请记住,如果有多个结果您将获得异常,您还可以使用FirstOrDefault()
,因此它看起来像:
row.GetChildRows("EventCategoryRelation")
.Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString())
.SingleOrDefault(x => Int32.Parse(x["category_id"].ToString()))