Получить красную линию под Any at = IsAvailable =! B.BorrowHistories.Any (h => h.ReturnDate == null) - PullRequest
0 голосов
/ 19 января 2019

Здравствуйте, я получил эту ошибку.

«ICollection» не содержит определения «Any», и нет доступного метода расширения «Any», принимающего первый аргумент типа «ICollection» (выотсутствует директива using или ссылка на сборку?)

Получить красную линию в поле Any at = IsAvailable =! b.BorrowHistories.Any (h => h.ReturnDate == null)

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using LibraryManagement.Models;
using Microsoft.Ajax.Utilities;

namespace LibraryManagement.Controllers
{
    public class BooksController : Controller
    {
        private ApplicationDbContext db = new ApplicationDbContext();

        // GET: Books
        public ActionResult Index()
        {
            var books = db.Books.Include(h => h.BorrowHistories)
                .Select(b => new BookViewModel
                {
                    BookId = b.BookId,
                    Author = b.Author,
                    Publisher = b.Publisher,
                    SerialNumber = b.SerialNumber,
                    Title = b.Title,
                    IsAvailable = !b.BorrowHistories.Any(h => h.ReturnDate == null)
                }).ToList();
            return View(books);
        }

Я следую руководству по созданию системы управления Libary с Asp.net MVC.

Спасибо

Андреас

1 Ответ

0 голосов
/ 19 января 2019

Any - это метод расширения IEnumerable<T>, который ICollection не реализует (но ICollection<T> делает). Если вы можете получить ICollection<T>, вы можете использовать его; в противном случае вы можете написать свой собственный эффективный Any (работает так же, как и версия .NET, с настройкой производительности .NET Framework не имеет, но имеет .NET Core):

Примечание: фрагмент ниже использует более старую версию языка C #, так как неизвестно, какова базовая линия.

public class Extensions
{
  public static bool Any(this IEnumerable source)
  {
    if (source == null) throw ArgumentNullException(nameof(source));

    // Performance tweak to eliminate allocation of enumerator if we have a count.
    if (source is ICollection) return ((ICollection)source).Count > 0;

    IEnumerator e = source.GetEnumerator();
    bool any = e.MoveNext();

    // Make sure the enumerator is properly disposed of if necessary.
    // IEnumerator<T> implements IDisposable but an implementation of IEnumerator itself might.
    if (e is IDisposable) ((IDisposable)e).Dispose();
    return any;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...