Не удалось неявно преобразовать тип 'System.Linq.IQueryable <Models.Profile>' в 'System.Linq.IOrderedQueryable <Models.Profile>' - PullRequest
0 голосов
/ 03 апреля 2019

Я реализовал сортировку, фильтрацию, разбиение по страницам на своей веб-странице, следуя инструкции по ссылке ниже

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page?view=aspnetcore-2.2

Сортировка и подкачка работают нормально, но ябыла проблема с функцией поиска.Я получил сообщение об ошибке «Не удалось неявно преобразовать tyoe« System.Linq.IQueryable »в« System.Linq.IOrderedQueryable »».Может кто-то помочь мне, пожалуйста.Заранее спасибо

У меня здесь есть мой Model.Profile

public partial class Profile
{
    public Profile()
    {
        Assessment = new HashSet<Assessment>();

    }

    public int ProfileId { get; set; }
    [DisplayName ("Profile Name")]
    public string ProfileName { get; set; }
    [DisplayName("Company Name")]
    public string CompanyName { get; set; }
    public int RoleId { get; set; }
    public int IndustryId { get; set; }
    public int PerspectiveId { get; set; }
    public int InfluenceLevelId { get; set; }
    public int OwnershipLevelId { get; set; }
    public string Interviewer { get; set; }
    [DisplayName ("Date Interviewed")]
    public DateTime? DateInterviewed { get; set; }
    [DisplayName("Created By")]
    public string CreatedBy { get; set; }
    [DisplayName("Created Date")]
    public DateTime? CreatedDate { get; set; }
    [DisplayName("Modified By")]
    public string ModifiedBy { get; set; }
    [DisplayName("Modifed Date")]
    public DateTime? ModifiedDate { get; set; }

    public virtual Industry Industry { get; set; }
    [DisplayName ("Influence Level")]
    public virtual InfluenceLevel InfluenceLevel { get; set; }
    [DisplayName ("Ownership Level")]
    public virtual OwnershipLevel OwnershipLevel { get; set; }
    public virtual Perspective Perspective { get; set; }
    public virtual Role Role { get; set; }
    public virtual ICollection<Assessment> Assessment { get; set; }
}
}

Вот мой код на моем контроллере, который выдает ошибку

{
    ViewData["CurrentFilter"] = searchData;

    var profile = _context.Profile
        .Include (p => p.Industry)
        .Include (p => p.InfluenceLevel)
        .Include (p => p.OwnershipLevel)
        .Include (p => p.Perspective)
        .Include (p => p.Role)
        .OrderByDescending (p => p.ProfileName);

    if (!string.IsNullOrEmpty (searchData)) {

        profile = profile.Where (p =>
            p.ProfileName.Contains (searchData)); //Here is the error

    }

Ответы [ 4 ]

0 голосов
/ 04 апреля 2019

Спасибо, Син Цзоу!

Вчера я также попытался добавить IQueryable к своему набору данных, как показано ниже, и это работает. Когда я увидел твой ответ, я попробовал его, и он тоже работает. Спасибо за помощь, 2 реализации работают:)

        IQueryable<Profile> profile = _context.Profile
            .Include(p => p.Industry)
            .Include(p => p.InfluenceLevel)
            .Include(p => p.OwnershipLevel)
            .Include(p => p.Perspective)
            .Include(p => p.Role)
            .OrderByDescending(p => p.ProfileName);


        if (!string.IsNullOrEmpty(searchData))
        {

            profile = profile.Where(p => p.ProfileName.Contains(searchData));

        }
0 голосов
/ 03 апреля 2019

Должно быть простое решение. При использовании LINQ вы можете использовать метод .ToList(). Итак, для вашего кода:

var profile = _context.Profile
    .Include (p => p.Industry)
    .Include (p => p.InfluenceLevel)
    .Include (p => p.OwnershipLevel)
    .Include (p => p.Perspective)
    .Include (p => p.Role)
    .OrderByDescending (p => p.ProfileName)
    .ToList(); // add here

if (!string.IsNullOrEmpty (searchData)) {

    profile = profile.Where (p =>
        p.ProfileName.Contains (searchData)).ToList(); // add here

}

Я создал DotNetFiddle , чтобы показать вам пример, который я только что написал. Работает как положено.

Дайте мне знать, если это работает.

0 голосов
/ 04 апреля 2019

Сначала вы получаете IOrderedQueryable тип profile, а затем назначаете ему IQueryable тип даты profile.Where (p =>p.ProfileName.Contains (searchData));.

Попробуйте использовать код ниже, чтобы установить profile как IQueryable:

var profile = from p in _context.Profile
              select p;

 if (!string.IsNullOrEmpty (searchData)) {

    profile = profile
       .Include (p => p.Industry)
       .Include (p => p.InfluenceLevel)
       .Include (p => p.OwnershipLevel)
       .Include (p => p.Perspective)
       .Include (p => p.Role)
       .OrderByDescending (p => p.ProfileName)
       .Where (p =>p.ProfileName.Contains (searchData));

}         
0 голосов
/ 03 апреля 2019

Профиль переменной уже объявлен как IOrderedQueryable, и вы пытаетесь назначить IQueryable.

Что произойдет, если вы попытаетесь:

if (!string.IsNullOrEmpty (searchData)) {

    var profile2 = profile.Where (p =>
        p.ProfileName.Contains (searchData)); //Here is the error

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...