如何从派生 类 创建匿名类型列表 - EF Code First

How to create an anonymous type list from derived classes - EF Code First

我有以下 classes:

Base Class: LikeIsRead, WhoLikedId, WhoseLikedId 属性。

Derived Classes: PostLike 多了一个 PostId 属性, CommentLike 多了一个CommentId 属性, ReplyLike 还有一个 ReplyId 属性.

基于likes,我想生成一个通知列表。我可以像这样针对每个派生的 class 分别执行此操作:

  var postlikes = db.Likes
                    .OfType<PostLike>
                    .Select(pl => new 
                         {
                            NotificationText = 'Someone liked your post.',
                            Type = "PostLike",
                            RelatedItem = pl.PostId
                         });

  var commentlikes = db.Likes
                    .OfType<CommentLike>
                    .Select(cl => new 
                         {
                            NotificationText = 'Someone liked your comment.',
                            Type = "CommentLike",
                            RelatedItem = cl.CommentId
                         });
  //the same for replylikes         

我想知道是否有一种方法可以使用 ONE LINQ 语句生成这样的列表?

如果不是,您认为我处理 Likes 的方式是好的做法吗?

查看匿名类型:Return anonymous type results?

简而言之,您可能可以,但不能。

最好使用视图模型,比如 NotificationsViewModel,其中包含您需要的字段,并从查询中返回。

  var likes = db.Likes
                .Take(10)
                .ToList()
                .Select(like => new NotificationsViewModel
                 {
                    Text = resolveNotificationString(like.GetType().Name),
                    Type = like.GetType().Name,
                    RelatedItem = like.Id
                 });

这对您的模型/用例进行了以下假设和一些隐式更改,

  • 这是为了填充视图,
  • 假设你只想要前几个,因为它是为了一个视图。您可以过滤 (Where()) 个未读的、最新的或适合您的应用程序的任何内容。
  • 你有一个机制 在某个地方 可以根据类似的类型名称为 Text 获得 string
  • Like 基础 class 具有通用 ID,而不是 PostId、CommentId` 等