如何在实体框架中包含实体特定属性?

时间:2017-08-25 17:07:50

标签: c# entity-framework linq

我正在使用Entity Framework。我没有足够的经验来解决任何问题。我现在面临的问题是:我有两个类,如下所示:

public class AspNetUser: NormalUser
{
    [Key]
    public string UserId { get; set; }

    public string PIN { get; set; }

    public string FullName { get { return this.LastName + " , " + this.FirstName; } }
}

public class OfferReview
{
    [Key]
    public string OfferReviewId { get; set; }

    public string UserId { get; set; }
    public string Review { get; set; }

    public virtual AspNetUser User { get; set; }
}

我需要将所有OfferReview属性绑定到AspNetUser.FullName属性==>我试过这样:

return context.OfferReviews
              .Where(It => It.OfferId == offerId)
              .Include(it => it.User.FullName)
              .ToList();

此处offerId是一个函数参数。我无法展示全部功能....

我可以在linq join的帮助下轻松获得上述要求。但是我想要像lambda表达式一样的东西。

有可能吗?或者,如果可能的话,如果不可能,那么还有其他方法吗?请帮忙

2 个答案:

答案 0 :(得分:1)

您的查询应该是:

return context.OfferReviews
              .Where(It => It.OfferId == offerId)
              .Include(it => it.User)
              .ToList();

这将返回OfferReview个实体的列表,每个实体都包含一个User个对象。

现在,您可以绑定OfferReview.User.FullName

答案 1 :(得分:0)

你可以通过技术ViewModel

来做到这一点

此ViewModel:

        public class ViewModel
{
    public string OfferReviewId { get; set; }
    public string UserId { get; set; }
    public string Review { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string FullName { get { return this.LastName + " , " + this.FirstName; } }
}

此查询:

     var query = context.OfferReview
             .Where(It => It.OfferReviewId == "1")
             .Select(p => new ViewModel
                {
                    OfferReviewId = p.OfferReviewId,
                    Review = p.Review,
                    UserId = p.UserId,
                    FirstName = p.User.FirstName,
                    LastName = p.User.LastName
                }).ToList();