1

私が間違っていることを理解できません。このエラーが発生するたびに:

エンティティまたは複合型 'BusinessLogic.CompanyWithDivisionCount' は、LINQ to Entities クエリで構築できません。

「会社」テーブルから情報を取得し、「部門」テーブルから各会社の部門数を取得して、PagedList を作成する必要があります。ここに私の「会社」テーブルがあります:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

using BusinessLogic.Services;
using BusinessLogic.Models.ValidationAttributes;

namespace BusinessLogic.Models
{
    public class Company
    {
        public Company()
        {
            Country = "US";
            Status = true;
        }

        public int Id { get; set; }

        [Required]
        [UniqueCompanyName]
        public string Name { get; set; }

        public string Street { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public int Zip { get; set; }
        public string Country { get; set; }

        public string ContactInfo { get; set; }

        [Required]
        public DateTime EffectiveDate { get; set; }
        public DateTime TerminationDate { get; set; }

        public bool Status { get; set; }

        [Required]
        public string URL { get; set; }
        public string EAP { get; set; }

        public string EAPCredentials { get; set; }

        public string BrandingColors { get; set; }

        public string Comments { get; set; }
    }
}

これが私のドメインモデルです:

public class Company
{
    public Company()
    {
        Country = "US";
        Status = true;
    }

    public int Id { get; set; }

    [Required]
    [UniqueCompanyName]
    public string Name { get; set; }

    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public int Zip { get; set; }
    public string Country { get; set; }

    public string ContactInfo { get; set; }

    [Required]
    public DateTime EffectiveDate { get; set; }
    public DateTime TerminationDate { get; set; }

    public bool Status { get; set; }

    [Required]
    public string URL { get; set; }
    public string EAP { get; set; }

    public string EAPCredentials { get; set; }

    public string BrandingColors { get; set; }

    public string Comments { get; set; }
}

public class CompanyWithDivisionCount: Company // I'm using this
{
    public int DivisionCount { get; set; }
}

これが私のコントローラーです:

public ActionResult CompaniesList(int? page)
{
    var pageNumber = page ?? 1;

    var companies = companyService.GetCompaniesWithDivisionsCount2();

    var model = companies.ToPagedList(pageNumber, PageSize);

    return View(model);
}

そして、ここに私のサービス部分があります:

public IQueryable<CompanyWithDivisionCount> GetCompaniesWithDivisionsCount2()
{
    return (from c in dataContext.Companies.AsQueryable()
            select new CompanyWithDivisionCount
            {
                Id = c.Id,
                Name = c.Name,
                Status = c.Status,
                EffectiveDate = c.EffectiveDate,
                URL = c.URL,
                EAP = c.EAP,
                EAPCredentials = c.EAPCredentials,
                Comments = c.Comments,
                DivisionCount = (int)dataContext.Divisions.Where(b => b.CompanyName == c.Name).Count()
            });
}

}

手伝ってくれてありがとう!!!

4

2 に答える 2

1

ここでPagedListの作成者。これは PagedList とは何の関係もありませんが、Entity Framework の問題です (私は Entity Framework の専門家ではないので、その点についてはお答えできません)。これが正しいことを確認するには、次の行に沿って単体テストを記述します。

[Test]
public void ShouldNotThrowAnException()
{
    //arrange
    var companies = companyService.GetCompaniesWithDivisionsCount2();

    //act
    var result = companies.ToList();

    //assert
    //if this line is reached, we win! no exception on call to .ToList()
}
于 2012-08-09T12:03:45.707 に答える