消息表:id pId userId Open topId Layer message Subscribers CreatedTime UpdateTime
消息接收到: id messageId userId messageRecipientType
说明:
消息表字段说明:
id (guid) 唯一主键
iId(guid) 上级消息
userId(guid) 消息的发送者用户Id
open(bool) 公开或私密
messageType(枚举) 项目、任务、小组、用户
topId(string) 表示当前消息树的最上层消息ID,如果当前消息就是最上层则留空
leyer(int) 当前消息在消息树中的深数(也可以理解为第几代)
message(string) 消息内容
subscribers(string) 消息订阅者列表,为公开消息指定订阅者(用英文逗号分隔开)
CreatedTime(datetime) 消息发布时间
UpdatedTime(datetime) 表示当前消息树的更新时间(消息本身不能修改,当消息有新回复时更新整个消息树的更新时间)
消息接收者表字段说明:
id(guid) 唯一主键
messageId 所属消息Id
userId(guid) 消息接收人Id
messageRecipientType(枚举) @我的,回复我的,公开的(该公开是在messageType值范围内公开)
现在要求用 LINQ to Entities 查询出与我相关的最近更新的20颗消息树(tree)?
注意:
1.消息是Tree树型,有上下级关系
2.消息分为公开或私有
3.公开消息不会通知到具体的接收人,也就不会写入数据到消息接收表
4.私有消息会通知到每位接收人,messageRecipientType字段表示消息与接收者之间的关系
5.与我相关的消息包含我发送的(消息表UserId)、我订阅的(消息表subscribers)、和我接收的(消息接收者UserId && (@我的,回复我的))。
难点:我发送的、我订阅的消息可以在本表查询,但我接收的消息需要联表查询。不联表就取不出我接收的消息,联表(Join)又会造成一条消息出现多次(我发送的消息有多个接收人时联表查询该消息就会有多条)。
Entitys.OrderByDescending(e=> oi.UpdatedTime).Take(20);
不谢
sorry 刚才问错了,不是取最近20条,是取与我相关的20条。
@Adming: 那就用userId匹配自己嘛 =。= 加个Where 就好了
@流星霜紫: 这么简单我就不在这儿提问了
@Adming: Entitys.OrderByDescending(e=> oi.UpdatedTime).Where(oi => oi.userId== “自己的ID”).Take(20);
@Adming: 还是说 你要 表的连接?
@流星霜紫: 我修改了问题,你自己看下
你现在的目的是做一个查询还是做一个统计?你要的是条数还是详细?
取当前与我相关的消息详情