【问题标题】:return a model with .Include to view返回带有 .Include 的模型以查看
【发布时间】:2013-05-07 10:16:16
【问题描述】:

我有以下物品型号:

public class Item

 {
   public int Id {get; set;}
   public string name {get; set;}
   public virtual ICollection<Comment> Comments {get; set;}
   public virtual Comment Comment {get; set;}
 }

我有以下用户模型:

public class User

 {
   public int Id {get; set;}
   public string UserName {get; set;}
   public string email {get; set;}
 }

我有以下评论模型:

public class Comment

 {
   public int Id {get; set;}
   public string text {get; set;}
   public DateTime DateCreated {get; set;}

   public int ItemId {get; set;}
   [ForeignKey("ItemId")]
   public virtual Item Item {get; set;}

   public int UserId {get; set;}
   [ForeignKey("UserId")]
   public virtual User User {get; set;}
 }

在我的 onModelCreating 上下文中

 modelBuilder.Enitity<Item>().HasOptional(c=>c.Comment).WithMany();

我的目标是返回只有请求用户评论过的项目的视图。

到目前为止我已经完成了:

 int UserId = db.Users.Where(u=>u.UserName.Equals(User.Identity.Name))
 .Select(u=>u.Id).FirstOrDefault();


 var itemsWithComments = db.Items.Include(c=>c.Comments).......

此时我想说:选择UserId == Comments.UserId的项目,将Items作为列表返回。

我的观点(使用 Razor)

 @model IEnumerable <project.Models,Item>

 @foreach (var item in Model)
 .....
 .....

非常感谢任何帮助。

如果您需要我澄清任何一点,请询问。

亲切的问候

【问题讨论】:

  • 你的意思是.Where(c=&gt; c.UserId == UserId)?

标签: c# entity-framework lambda


【解决方案1】:

假设您只想过滤来自特定用户的 cmets,则不能使用 Include(),但可以使用投影来选择过滤后的列表。

var itemsWithComments = db.Items.Select(o => new
{
    Item = o,
    Comments = o.Comments.Where(c => c.UserId == userId)
});

如果用户附加到项目本身,那么查询很简单:

var itemsWithComments = db.Items.Include(o => o.Comments).Where(o => o.UserId == userId);

要记住的一件事 - 调用 Select() 几乎总是会重置之前的任何 Include() 调用,因此 query.Include().Select() 将没有包含,而 query.Select().Include() 将。

【讨论】:

  • 您好 Knaģis,我想要过滤结果。我不确定如何将结果返回给用户。我收到“传入字典的模型项的类型为'System.Data.Infrastructure.DbQuery'1 [f_AnonymousType5'2'.....字典需要'System.Collections.Generic.IEnumerable 类型的模型项'1 [project.Models.Comment]”。感谢您的帮助
猜你喜欢
  • 2012-02-14
  • 2020-08-13
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
相关资源
最近更新 更多