Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ select(使用实体框架)_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

LINQ select(使用实体框架)

LINQ select(使用实体框架),linq,entity-framework,linq-to-entities,Linq,Entity Framework,Linq To Entities,具有下列表格: 信息 消息线程 MessageThreadParticipant MessageReadState 我需要使用LINQ获得以下信息,我正在使用EF4,这样它们就可以相互了解 1从线程获取前1条消息的列表,并标记这是否是给定LoginId的新消息 比如Loginid118 应该只显示一个messageID为368的项目列表,因为我参与了该对话。另外,我需要知道这是LoginId 118的一条新消息,因为MessageReadState没有我的条目 例2:登录116 应该列出4个线

具有下列表格:

信息

消息线程 MessageThreadParticipant MessageReadState 我需要使用LINQ获得以下信息,我正在使用EF4,这样它们就可以相互了解

1从线程获取前1条消息的列表,并标记这是否是给定LoginId的新消息

比如Loginid118

应该只显示一个messageID为368的项目列表,因为我参与了该对话。另外,我需要知道这是LoginId 118的一条新消息,因为MessageReadState没有我的条目

例2:登录116 应该列出4个线程,因为我参与了threadId的24、25、26、27。来自每个线程的最新消息

编辑: 如果任何人使用相同的结构


谢谢

如果您不显示实体的导航属性,那么很难回答有关LINQ to实体的问题。但假设类和导航属性具有执行此类查询所需的一切,我将尝试以下方法:

var result = context.MessageThreadParticipants
    .Where(mtp => mtp.LoginId == givenLoginId)
    .Select(mtp => new
    {
        MessageThread = mtp.MessageThread,
        NewestMessage = mtp.MessageThread.Messages
           .OrderByDescending(m => m.CreateDate)
           .Select(m => new
           {
               Message = m,
               HasBeenRead = m.MessageReadStates
                   .Any(mrs => mrs.LoginId == givenLoginId)
           })
           .FirstOrDefault(),
    })
    .ToList();
因此,实体MessageThreadParticipant必须具有MessageThread属性。实体MessageThread必须具有Messages集合,实体Message必须具有MessageReadStates集合

结果是匿名对象的集合。每个对象都包含:

MessageThread:具有givenLoginId的用户参与的线程 消息:此线程中的最新消息 NewestMessage.HasBeenRead:如果已读取最新消息,则为布尔标志
谢谢斯劳玛的帮助。实际上,我尝试了几个查询,但我被困在分组上,尝试连接和GroupJoin,但都不起作用。你的代码工作得很好。正是我想要的。谢谢!。