0

2 つの異なるオブジェクトのリストを作成することを除いて、まったく同じように見える 2 つの関数があります。2 つの異なるオブジェクトは非常によく似ていますが、オブジェクトの 1 つで関数の 1 つを実行しようとすると、「エンティティまたは複合型は、LINQ to Entities クエリで構築できません。」というエラー メッセージが表示されます。何が起こっているのかを非常に簡単な言葉で説明してもらえますか? また、動作するようにコードを変更する方法を教えてもらえますか? ありがとう、アラン。

機能 1 (作品):

    public static List<ChartApp> ListChartApplications()
    {
        using (var db = new LatencyDBContext())
        {
            var appNames = db.LoginApplications.Select(item => new ChartApp()
            {
                LoginApplicationID = item.LoginApplicationID,
                LoginAppName = item.LoginAppName,
            }).OrderBy(item => item.LoginAppName);
            return appNames.ToList();
        }
    }

関数 2 (「return appNames.ToList();」でエラーをスロー):

    public static List<LoginApplication> ListApplications()
    {
        using (var db = new LatencyDBContext())
        {
            var appNames = db.LoginApplications.Select(item => new LoginApplication()
            {
                LoginApplicationID = item.LoginApplicationID,
                LoginAppName = item.LoginAppName,
            }).OrderBy(item => item.LoginAppName);
            return appNames.ToList();
        }
    }

クラス:

public class ChartApp
{
    public ChartApp()
    {
        this.LoginHistories = new List<ChartHist>();
    }

    public int? LoginApplicationID { get; set; }
    public string LoginAppName { get; set; }
    public virtual ICollection<ChartHist> LoginHistories { get; set; }
    public int Step { get; set; }
}

public class LoginApplication
{
    public LoginApplication()
    {
        this.LoginHistories = new List<LoginHistory>();
    }

    public int LoginApplicationID { get; set; }
    public string LoginAppName { get; set; }
    public virtual ICollection<LoginHistory> LoginHistories { get; set; }
}

編集: オブジェクトの 1 つがデータベースにマップされている可能性がありますか?

public class LoginApplicationMap : EntityTypeConfiguration<LoginApplication>
{
    public LoginApplicationMap()
    {
        // Primary Key
        this.HasKey(t => t.LoginApplicationID);

        // Properties
        this.Property(t => t.LoginAppName)
            .HasMaxLength(500);

        // Table & Column Mappings
        this.ToTable("LoginApplication");
        this.Property(t => t.LoginApplicationID).HasColumnName("LoginApplicationID");
        this.Property(t => t.LoginAppName).HasColumnName("LoginAppName");
    }
}
4

1 に答える 1

1

この場合の私の解決策は、機能していない機能を削除し、機能しているものをすべての場所で使用することでした。マップされた同様の関数については、次の関数を使用して値を返します。

    public static List<LoginEnvironment> ListEnvironments(bool allSelection)
    {
        using (var db = new LatencyDBContext())
        {
            //GET ALL THE ENVIRONMENT NAMES              
            var envNames = from e in db.LoginEnvironments
                           orderby e.LoginEnvName
                           select e;

            //PUT ALL THE ENVIRONMENTS INTO A LOCAL LIST
            var listEnv = new List<LoginEnvironment>();

            if (allSelection)
            {
                var defaultAll = new LoginEnvironment();
                defaultAll.LoginEnvironmentID = 0;
                defaultAll.LoginEnvName = "All";
                listEnv.Add(defaultAll);
            }

            foreach (var item in envNames)
            {
                var localEnv = new LoginEnvironment();
                localEnv.LoginEnvironmentID = item.LoginEnvironmentID;
                localEnv.LoginEnvName = item.LoginEnvName;
                listEnv.Add(localEnv);
            }

            return listEnv;
        }
    }
于 2013-02-21T17:48:04.710 に答える