使用 时"Sequence contains no elements"。任意()



这似乎是一个简单的问题。 我开始怀疑剃须刀中的错误。

if (Model.athleteImages .Any()){
//some code
}

我已将上述内容替换为以下内容:

    if (Model.athleteImages.Count > 0)
    {
        var i = 0;
        <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
        while (i + 1 < Model.athleteImages.Count())
        {
            i++;
            <li data-target="#carousel-example-generic" data-slide-to="@i"></li>
        }
    }

对于没有元素的集合,这总是抛出"序列不包含任何元素",例如 Count() = 0。

Any() 应该测试序列是否包含元素。 这就是它的全部目的。

我也试过

if (Model.athleteImages.FirstOrDefault().[fieldName] != null){
//some code
}

相同的结果。

这是来自控制器的一些相关代码,供那些想知道图像集合是什么的人使用

var adImages = from i in db.athleteImages
    where thisAd.albumId == i.albumId
    where i.deleted == false
    select i;
viewModel.athleteImages = athleteImages.ToList();

这是视图模型类

public class ListingViewModel
{
    public site site { get; set; }
    public userAd userAd { get; set; }
    public List<athleteImage> athleteImages { get; set; }
    public string categoryName { get; set; }
    public int categoryId { get; set; }
    public string subcategoryName { get; set; }
    public int subcategoryId { get; set; }
}

堆栈跟踪

[InvalidOperationException: Sequence contains no elements]
   System.Linq.Enumerable.First(IEnumerable`1 source) +269
   ASP._Page_Views_userAds_Listing_cshtml.Execute() in c:UsersBillDocumentsVisual Studio 2013ProjectsCuriousMarketplacesCuriousMarketplacesViewsuserAdsListing.cshtml:32
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +198
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105
   System.Web.WebPages.StartPage.RunPage() +17
   System.Web.WebPages.StartPage.ExecutePageHierarchy() +64
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +235
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +52
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +28
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651116
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

如果您真正关心的是集合中是否有任何图像,那么这样的事情可能更有意义:

if (Model.Images.Count > 0) {
}

如果源为 null,Any() 将抛出异常,这是记录的行为以及它应该如何工作:http://msdn.microsoft.com/en-us/library/vstudio/bb534972%28v=vs.100%29.aspx

Dave 的解决方案非常好,但我会添加一个空检查,如果对象为空,Count 也会抛出异常。

if(Model.Images != null && Model.Images.Count > 0) {
}

Dan给了我需要的提示。

即使调试器指示错误发生在 if 块的关闭块处,但事实并非如此。

在同一视图的后续代码块中,我有这个:

<div class="item active" id="0">
    <div style="width:400px;height:300px;text-align:center;background-color:black;">
        <img src="/Content/Images/Deals/1/@Model.athleteImages.First().fullImage" style="height:300px;" alt="...">
        <div class="carousel-caption">
            some caption
        </div>
    </div>
</div>

要解决此问题,我需要再次测试。 所以:

if (Model.athleteImages.Count > 0) 
{
<div class="item active" id="0">
    <div style="width:400px;height:300px;text-align:center;background-color:black;">
        <img src="/Content/Images/Deals/1/@Model.athleteImages.First().fullImage" style="height:300px;" alt="...">
        <div class="carousel-caption">
            some caption
        </div>
    </div>
</div>
}

让我大吃一惊的是,错误消息在第 32 行指示存在问题。 实际上,它位于第 37 行。

最新更新