2017-10-25 8 views
1

picture of DB私のデータベースには3つのテーブルがあります顧客、映画、顧客Filmsは顧客と映画の間のテーブルで、私は彼らが借りた映画。 私はspesific id(コード8と9)の仕事をする関数を書いています。私の質問は、すべてのエンティティにデータを表示する方法です。私のクラス多対多関係のすべてのエンティティのデータを取得

namespace MoviePro.Models 
{ 
using System; 
using System.Collections.Generic; 

public partial class Films 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
"CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public Films() 
    { 
     this.Customers = new HashSet<Customers>(); 
    } 

    public int FilmId { get; set; } 
    public string FilmName { get; set; } 
    public string Length { get; set; } 
    public string Genre { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
    "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Customers> Customers { get; set; } 
    } 
    } 
    public partial class Customers 
    { 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
    "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public Customers() 
    { 
     this.Films = new HashSet<Films>(); 
    } 

    public int CustomerId { get; set; } 
    public string CustomerName { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 
    public Nullable<int> FilmId { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", 
    "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Films> Films { get; set; } 
    } 
    } 

を追加

public ActionResult GetData() 
    { 
     MyDatabaseEntities2 db = new MyDatabaseEntities2(); 
     var q = (from c in db.Customers 
       from Films in db.Films 
        where Films.FilmId == 8 
        where c.CustomerId == 9 
       select new 
       { 
        c.CustomerName, 
        c.Phone, 
        c.FilmId, 
        c.CustomerId, 
         FilmName = Films.FilmName 

       }).ToList(); 
     return Json(new { data = q }, JsonRequestBehavior.AllowGet); 
    } 

、そんなに

をありがとう****新しいコードに動作することを****

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MoviePro.Models; 
using System.Data.Entity; 

namespace MoviePro.Controllers 
{ 
public class CustomersController : Controller 
{ 
    // GET: Customers 
    public ActionResult Index() 
    { 
     return View(); 
    } 
    public ActionResult GetData() 
    { 
     MyDatabaseEntities2 db = new MyDatabaseEntities2(); 
     var q = (from c in db.Customers 
       from Films in c.Films 
       where Films.FilmId == Films.FilmId 
       where c.CustomerId == c.CustomerId 
       select new 
       { 
        c.CustomerName, 
        c.Phone, 
        c.FilmId, 
        c.CustomerId, 
        FilmName = Films.FilmName 

       }).ToList(); 
     return Json(new { data = q }, JsonRequestBehavior.AllowGet); 
    } 

    public ActionResult loaddata() 
    { 
     MyDatabaseEntities2 dc = new MyDatabaseEntities2(); 

     var customers = dc.Customers.Select(c => new 
     { 
      c.CustomerName, 
      c.Phone, 
      c.FilmId, 
      c.CustomerId, 


     }); 

     return Json(new { data = customers }, JsonRequestBehavior.AllowGet); 

    } 

    public ActionResult AddOrEdit(int id = 0) 
    { 
     if (id == 0) 
      return View(new Customers()); 

     else 
     { 
      using (MyDatabaseEntities2 db = new MyDatabaseEntities2()) 
      { 
       return View(db.Customers.Where(x => x.CustomerId== 
    id).FirstOrDefault<Customers>()); 

      } 
     } 
    } 

    [HttpPost] 
    public ActionResult AddOrEdit(Customers customer) 
    { 
     using (MyDatabaseEntities2 db = new MyDatabaseEntities2()) 
     { 
      if (customer.CustomerId == 0) 
      { 
       db.Customers.Add(customer); 
       db.SaveChanges(); 
       return Json(new { success = true, message = "Saved 
     Successfully" }, JsonRequestBehavior.AllowGet); 
      } 
      else 
      { 
       db.Entry(customer).State = EntityState.Modified; 
       db.SaveChanges(); 
       return Json(new { success = true, message = "Updated 
     Successfully" }, JsonRequestBehavior.AllowGet); 
      } 
     } 


    } 

    [HttpPost] 
    public ActionResult Delete(int id) 
    { 
     using (MyDatabaseEntities2 db = new MyDatabaseEntities2()) 
     { 
      Customers emp = db.Customers.Where(x => x.CustomerId == 
     id).FirstOrDefault<Customers>(); 

      db.Customers.Remove(emp); 
      db.SaveChanges(); 
      return Json(new { success = true, message = "Deleted 
     Successfully" }, JsonRequestBehavior.AllowGet); 
     } 
     } 
     } 
     } 
+0

このクエリは、顧客と必ずしも関連していないフィルムを示しています

は、多くの場合、ネストされたリストを表示するために、より便利です。私はあなたがこの顧客に請求しなかったことを願っています! 'Customer'はナビゲーションプロパティ' Films'を持っていなければなりません。それはあなたが使うべきものです。あなたがもっと助けが必要な場合は、クラスを見る必要があります。 –

+0

こんにちは、私は私のdbの写真とコードを追加しました。ありがとうございました – user4485863

答えて

1

基本的なLINQ多対多の関係を照会するための照会形状は次のとおりです。

from c in db.Customers 
from f in c.Films // NOT db.Films 
select new 
{ 
    Customer = c.Customername, 
    Film = f.FilmName, 
    ... 
} 

これはSelectManyのクエリ構文と同等です。結果はフラットなデータのリストなので、これは一般に「フラット化」と呼ばれます。

from c in db.Customers 
select new 
{ 
    c.Customername, 
    c. ..., 
    Films = from f in c.Films 
      select new 
      { 
       f.FilmName, 
       f. ..., 
      } 
} 
+0

私の一日を救ってくれてありがとう!!!!! – user4485863

+0

私は今、私は別の問題を抱えています。「新規顧客の追加」を押すと詳細が記入されますが、ブラウザのエンティティは表示されませんが、dbでは更新されます。どのように私はaddoredit関数を変更する必要がありますか?私はコード – user4485863

+0

を追加しました申し訳ありませんが、それはまったく新しい質問です。あなたがそれに答えるために必要なすべての詳細を与えることができるように、新しい質問を投稿してください。 –