2011-01-22 40 views
0

單一的結果我有一個查詢返回使用LINQ

row.GetChildRows("EventCategoryRelation") 
    .Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString()) 
    .Select(x => Int32.Parse(x["category_id"].ToString())) 

該查詢返回一個IEnumerable。我期待一個「詮釋」

幫我修改我的LINQ查詢

+0

然而,這會返回一個DataRowCollection這是不是我所期望的返回bot一個整數。 – 2011-01-22 17:57:54

回答

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

+0

返回值將是Int32,他正在將字符串解析爲Int32 – 2011-01-22 13:00:41

1

您可以隨時添加到您的查詢的末尾:

.Single(); 

如果枚舉只包含一個將返回一個值,或者如果它含有比彼此量拋出異常。

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() 

當你希望多行,先用(FirstOrDefault如果你不想一個異常,如果沒有數據返回)。多行將在SingleSingleOrDefault上拋出異常。

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()將在這種情況下拋出異常。

0

的只是SingleOrDefault()代替Select(),請記住,如果有不止一個結果,你會得到一個異常,你也可以使用FirstOrDefault(),所以它看起來像:

row.GetChildRows("EventCategoryRelation") 
.Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString()) 
.SingleOrDefault(x => Int32.Parse(x["category_id"].ToString()))