我有以下课程:
基类: Like
有IsRead
,WhoLikedId
,WhoseLikedId
属性。
派生类: PostLike
有一个额外的PostId
属性,CommentLike
有一个额外的CommentId
属性,ReplyLike
有一个额外的ReplyId
财产。
基于likes
,我想生成一个通知列表。我可以按照这样的每个派生类单独执行此操作:
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
的方式是一种好习惯吗?
答案 0 :(得分:0)
在匿名类型上看到这一点: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()
)未读取的,最新的或适合您应用的任何内容。 string
的{{1}}。 Text
基类具有公共ID,而不是Like
,CommentId`等。