0

簡単なLINQクエリを実行しましたが、今作成する必要のある2つに困惑しています。基本的に、クラスIDを送信します。エンティティが基づいているクラスを以下に投稿します。

public class ScheduledClass
{
    public ScheduledClass()
    {
        Attendees = new List<ClassAttendee>();
    }

    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [HiddenInput(DisplayValue = false)]
    [Required(ErrorMessage = "Please enter a topic")]
    public int ClassTopicID { get; set; }

    [Display(Name = "Topic")]
    public virtual ClassTopic ClassTopic { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int ClassTypeID { get; set; }

    [Display(Name = "Class Type")]
    public virtual ClassType ClassType { get; set; }

    [Required]
    [DataType(DataType.Date)]
    [Display(Name = "Class Date")] 
    public DateTime ClassDate { get; set; }

    [Display(Name = "Attendees")] 
    public virtual ICollection<ClassAttendee> Attendees { get; set; }
}

 public ClassTopic()
    {
        Products = new List<ClassTopicProduct>();
    }

    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [Required(ErrorMessage = "Please enter a title")]
    public string Title { get; set; }

    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Display(Name = "Products")]
    public virtual ICollection<ClassTopicProduct> Products { get; set; }
}

public class ClassTopicProduct
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int ClassTopicID { get; set; }

    [ForeignKey("ClassTopicID")]
    public ClassTopic ClassTopic { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int ProductID { get; set; }

    [ForeignKey("ProductID")]
    public ProductType ProductType { get; set; }
}

public class CustomerEmail
{

    public CustomerEmail()
    {
        CustomerEmailModules = new List<CustomerEmailModule>();
    }

    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int CustomerID { get; set; }

    public virtual Customer Customer { get; set; }

    public string Name { get; set; }
    public string Email { get; set; }

    [DataType(DataType.PhoneNumber)]
    public string PhoneNumber { get; set; }

    [Display(Name = "Product Update")]
    public Boolean SendProductUpdateEmail { get; set; }
    [Display(Name = "Expiration ")]
    public Boolean SendExpirationEmail { get; set; }

    [Display(Name = "Products")]
    public virtual ICollection<CustomerEmailModule> CustomerEmailModules { get; set; }
}

public class CustomerEmailModule
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int CustomerEmailID { get; set; }

    public CustomerEmail CustomerEmail { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int? ProductID { get; set; }

    [ForeignKey("ProductID")]
    public ProductType ProductType { get; set; }
}

編集_____ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ _ _

public class ProductType
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [Required(ErrorMessage = "Please enter a product type description")]
    public string Description { get; set; }

    public virtual ICollection<ProductTypeDetail> ProductDetails { get; set; }
}

編集_____ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ _ _

ですから、私は基本的に、次のクラスに興味があるかもしれない人々にメールを送ろうとしています。各クラスにはクラストピックがあります。クラストピックには、1つ以上の製品が関連付けられています。クラスIDを取得したら、クラスのクラストピックに関連付けられているすべての製品を取得する必要があります。それができたら、CustomerEmailsを確認する必要があります。各CustomerEmailには、関連することに関心のある製品がいくつもあります。PRoductID = ClassTopicProductsの結果の製品IDのいずれかであるCustomerEmailModulesを持つCustomerEmailを見つける必要があります。これが私が以下でやろうとしたことですが、うまくいきません。

 public JsonResult GetEmailClassInterest(int id)
    {
         var classprods = UoW.ScheduledClasses 
            .Where(o => o.ID == id)
            .Select(p => new
            {
                p.ClassTopic.Products
            });

        var customeremails = from p in UoW.CustomerEmails where classprods.Any(z => z.Products.Any(x => x.ID == p.ID)) select p.Email;
        return Json(customeremails, JsonRequestBehavior.AllowGet);
    }

クエリは正常に実行されたようですが、結果が得られず、所有しているデータをベースに送信する必要があります。誰かが私が間違っていることを教えてくれるなら、私はそれをいただければ幸いです。

ありがとう

4

1 に答える 1

0

これを試してください:

var classprods = UoW.ScheduledClasses 
            .Where(o => o.ID == id)
            .SelectMany(sched => sched.ClassTopic.Products.Select(prod => prod.ProductID));

var customerEmails = UoW.CustomerEmailModules.Include("CustomerEmails")
                                             .Where(mod => mod.ProductID != null && classprods.Contains(mod.ProductID)
                                             .Select(mod => mod.CustomerEmail.Email);
于 2013-01-04T19:29:12.707 に答える