我有以下代码:
var questionStatuses =
(
from questionStatus in this._questionStatusService.GetQuestionStatuses()
select new
{
id = questionStatus.QuestionStatusId,
status = questionStatus.Status
}
);
if (questionStatuses == null || questionStatuses.length() == 0)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
else
{
var response = Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
return response;
}
questionStatuses是一个IEnumrable。
我如何检查以确保其内容不仅仅是一个空数组?我试过.length()但它给出了一个错误。这也是WebAPI控制器的一部分,所以可以返回IEnumerable或者我应该将它放入列表中,如果是这样,我该怎么做?
答案 0 :(得分:3)
答案 1 :(得分:2)
使用.Count()
方法代替.length()
码
if (questionStatuses == null || questionStatuses.Count() == 0)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
else
{
var response = Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
return response;
}
答案 2 :(得分:2)
您可以使用.Count()
中的System.Linq
来获取长度。但是,您通常不希望这样做,因为它会强制实现整个可枚举。 (另请注意,并非所有枚举都支持多次枚举)
如果您必须转换为列表,请查看.ToList()
扩展方法。
如果给你一个
,通常你应该返回IEnumerable
另见SO上的其他答案(例如IEnumerable doesn't have a Count method)。我再次建议你首先考虑一下你是否真的需要计算。
最后看看其他答案,了解如何使用.Any()
检查枚举是否为空(例如Recommended way to check if a sequence is empty)
答案 3 :(得分:1)
使用计数
questionStatuses.count()
答案 4 :(得分:1)
使用count()
尝试使用此代码,而不是代码
var questionStatuses =
(
from questionStatus in this._questionStatusService.GetQuestionStatuses()
select new
{
id = questionStatus.QuestionStatusId,
status = questionStatus.Status
}
);
var response =(questionStatuses==null || questionStatuses.count() == 0) ? Request.CreateResponse(HttpStatusCode.NotFound):Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
return response ;
或
<强>更新强>
试试这个
var questionStatuses =
(
from questionStatus in this._questionStatusService.GetQuestionStatuses()
select new
{
id = questionStatus.QuestionStatusId,
status = questionStatus.Status
}
);
var response = !questionStatuses.Any() ? Request.CreateResponse(HttpStatusCode.NotFound):Request.CreateResponse(HttpStatusCode.OK, questionStatuses);
return response ;
答案 5 :(得分:0)
由于您只想知道可枚举是否为空,您可以这样做:
if (questionStatuses == null || !(questionStatuses.GetEnumerator().MoveNext())){
这不需要枚举完整的IEnumerable
- 否则可能代价高昂。