0

かなりの時間を費やしましたが、このクエリを機能させる方法がわかりません。ユーザーが次のようなものを選択できる、稼働時間タイプのモジュールを作成しています。

Monday open from 8am to 11am closed from 11am to 1pm and open from 1pm to 5pm

これは完全に動的であり、ユーザーは必要な開閉回数を選択できます (動的に生成されたフォーム入力)。

これを行うために、いくつかのクラスを作成しました(これが適切な方法であるかどうかはわかりません。これは、約1週間asp.net mvc、C#、およびEFを使用しているためです。提案があれば大歓迎です)

public class HoursOfOperation
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public IQueryable<CompanyHour> Monday { get; set; }
    public IQueryable<CompanyHour> Tuesday { get; set; }
    public IQueryable<CompanyHour> Wednesday { get; set; }
    public IQueryable<CompanyHour> Thursday { get; set; }
    public IQueryable<CompanyHour> Friday { get; set; }
    public IQueryable<CompanyHour> Saturday { get; set; }
    public IQueryable<CompanyHour> Sunday { get; set; }

    //Navigation Property
    public CompanyInformation Company { get; set; }

}

public class CompanyHour
{
    public int id { get; set; }
    public Status Status { get; set; }
    public string From { get; set; }
    public string To { get; set; }
}

public enum Status
{
    Closed,
    Open,
    ByAppointmentsOnly
}

完全を期すために、ここに私のcompanyInformationクラスがあります

public class CompanyInformation
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int id { get; set; }

    //[Required]
    [DisplayName("Company Name:")]
    public string companyName { get; set; }

    [DisplayName("Website Address:")]
    [Url(ErrorMessage="The Website field is not a valid fully-qualified http, https, or ftp URL. (Example: http://www.website.com)")]
    public string website { get; set; }
    public string contactTitle { get; set; }

    //[Required]
    [DisplayName("Contact First Name:")]
    public string contactFirstName { get; set; }
    //[Required]
    [DisplayName("Contact Last Name:")]
    public string contactLastName { get; set; }

    //[Required]
    [Phone]
    [DisplayName("Phone Number:")]
    public string contactPhoneNumber { get; set; }

    [DisplayName("Address Display?")]
    public bool displayAddress { get; set; }
    [DisplayName("Phone Number?")]
    public bool displayPhoneNumber { get; set; }

    //[Required]
    [DisplayName("Address 1:")]
    public string address1 { get; set; } 
    [DisplayName("Address 2:")]
    public string address2 { get; set; }

    //[Required]
    [DisplayName("City:")]
    public string city { get; set; }

    //[Required]
    [DisplayName("State:")]
    public string state { get; set; }

    //[Required]
    [DisplayName("Zip/Postal Code:")]
    public string zipCode { get; set; }

    [DisplayName("Search Engine?")]
    public bool allowSearchEngines { get; set; }


    //navigation Properties
    public virtual ICollection<UserProfile> CompanyUsers { get; set; }
    public virtual ICollection<HoursOfOperation> CompanyHours { get; set; }


}

その理由は、monday, tue.... を HoursofOperation クラスにハードコーディングしたのは、mvc が動的に生成されたフィールドを簡単にマップできるようにするためです (そして、その部分は機能します!!! :))

ここで、データベースにクエリを実行し、何時間もの操作モデルを作成して (取得時に) ビューに送り返し、保存された情報を取り戻すことができるようにします。しかし、それを行う方法がわかりません。HoursOfOperation クラスを送り返しています。

私が現在持っているクエリ:

var model = company.CompanyHours.Where(e => e.Company.id == company.id);

id (正しい id) のみを持つ HoursOfOperation モデルを返すだけです。すべての companyHours エンティティはすべて null です。

適切なクエリを考え出すのを手伝ってくれる人はいますか?

4

2 に答える 2

1

InClude子エンティティを取得するには、メソッドを使用してこれを行う必要があると思います

context.Companies
             .Include("CompanyHours")
             .Where(e => e.Company.id == company.id) ;
于 2013-01-17T06:33:19.717 に答える
0

さて、私はついにこの問題を修正しましたが、私が行った方法は、モデルをより適切で正しい設計に完全に再構築することでした。

于 2013-01-18T02:44:56.053 に答える