1

以下のコード スニペットをアプリケーションで問題なく実行できます。

Projects.Select(s =>
                        new ProjectName()
                        {
                            ProjectID = s.ProjectID,
                            Name = s.Name
                        })  

ProjectName は、次のクラスに存在するパラメーターなしのコンストラクターであることに注意してください。

    namespace YeagerTechModel.DropDownLists
    {
       [DataContract]
        [Serializable]
        public partial class ProjectName
        {
            [DataMember]
            public Int16 ProjectID { get; set; }
            [DataMember]
            public String Name { get; set; }
        }
    }

ただし、アプリケーションで次のクエリを実行できません。設計時のコンパイル エラーはありません。「Catch」ステートメントの実行時に、この投稿の件名でのみエラーが発生します。

Projects.Where(w => w.Status.Description == "Not Started").Select(s =>
                        new CustomerProjectDDL()
                        {
                             ProjectName =
                            {
                               ProjectID = s.Project,
                               Name = s.Name
                            },

                             Customer =
                            {
                                CustomerID = s.CustomerID,
                                Email = s.Customer.Email,
                                City = s.Customer.City,
                                State = s.Customer.State,
                                Zip = s.Customer.Zip
                            }

                        })

CustomerProjectDDL は、2 つのクラスを含むパラメーターなしのコンストラクターであることに注意してください。

namespace YeagerTechModel.ViewModels
{
    [DataContract]
    [Serializable]
    public partial class CustomerProjectDDL
    {
        [DataMember]
        public Customer Customer = new Customer();
        [DataMember]
        public ProjectName ProjectName = new ProjectName();
    }
}

ビューには両方のプロパティが必要なため、ビューにはこれらのクラスの両方が必要です。Customer オブジェクトは、すべてのプロパティを持つ DbContext を使用して Visual Studio の ORM のコード生成アイテムから生成され、ProjectName クラスは上記の投稿で指定した最初のクラスです。

助けていただければ幸いです...

AutoMapperを使用して新しい ViewModel に手動でプロパティを入力する以外に、ビューを満たすために 1 つのモデル内の 2 つ以上の別々のテーブルからデータを取得するにはどうすればよいでしょうか?

私がやったことは良いコンセプトだと思いました。生成された DbContext またはその他のクラスのいずれかを取得し、スーパークラス (CustomerProjectDDL クラスなど) 内に配置するだけです。

4

1 に答える 1

3

オブジェクトにnewキーワードを追加します。.Select

Projects.Where(w => w.Status.Description == "Not Started").Select(s =>
                        new CustomerProjectDDL()
                        {
                            ProjectName = new ProjectName()
                            {
                                ProjectID = s.Project,
                                Name = s.Name
                            },

                            Customer = new Customer()
                            {
                                CustomerID = s.CustomerID,
                                Email = s.Customer.Email,
                                City = s.Customer.City,
                                State = s.Customer.State,
                                Zip = s.Customer.Zip
                            }    
                        });

sagesky36

私の Customer オブジェクトは次のようになります。

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace YeagerTechModel
{
    using System;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Collections.Generic;

    [Serializable,  DataContract(IsReference = true)] 
     public partial class Customer
    {
        public Customer()
        {
            this.Projects = new HashSet<Project>();
        }

        [DataMember] public short CustomerID { get; set; }
        [DataMember] public string UserName { get; set; }
        [DataMember] public string Email { get; set; }
        [DataMember] public string Company { get; set; }
        [DataMember] public string FirstName { get; set; }
        [DataMember] public string LastName { get; set; }
        [DataMember] public string Address1 { get; set; }
        [DataMember] public string Address2 { get; set; }
        [DataMember] public string City { get; set; }
        [DataMember] public string State { get; set; }
        [DataMember] public string Zip { get; set; }
        [DataMember] public string HomePhone { get; set; }
        [DataMember] public string CellPhone { get; set; }
        [DataMember] public string Website { get; set; }
        [DataMember] public string IMAddress { get; set; }
        [DataMember] public System.DateTime CreatedDate { get; set; }
        [DataMember] public Nullable<System.DateTime> UpdatedDate { get; set; }

        [DataMember] public virtual ICollection<Project> Projects { get; set; }
    }
}
于 2013-10-17T19:23:19.080 に答える