C# 返回要查看的带有.Include的模型

C# 返回要查看的带有.Include的模型,c#,entity-framework,lambda,C#,Entity Framework,Lambda,我有以下项目模型: 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 Comment { p

我有以下项目模型:

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 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;}
 }
在我的onmodel创建上下文中

 modelBuilder.Enitity<Item>().HasOptional(c=>c.Comment).WithMany();
在这一点上,我想说:选择UserId==Comments.UserId的项目,将项目作为列表返回

和我的观点(使用剃须刀)

@model IEnumerable
@foreach(模型中的var项目)
.....
.....
非常感谢您的帮助

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


亲切问候

假设您只想过滤特定用户的评论,您不能使用
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()
将不会有Include,而
query.Select().Include()

您的意思是
。其中(c=>c.UserId==UserId)
?你好,克纳伊斯,我想要过滤结果。我不确定如何将结果返回给用户。我收到“传入字典的模型项的类型为'System.Data.Infrastructure.DbQuery'1[f_AnonymousType5'2'…字典需要'System.Collections.Generic.IEnumerable'1[project.Models.Comment]类型的模型项”。感谢您的帮助
 @model IEnumerable <project.Models,Item>

 @foreach (var item in Model)
 .....
 .....
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);