我正在为这个论坛进行编码,由于我是LINQ的新手,因此用户访问主页时遇到了这个问题。我想要一个显示这样的论坛列表的表:
Forum --- Topics (count) --- Posts (count) --- LastPostUserId --- LastPostTime
我有以下SQL表:
Forums:
ForumId (int32),
Title (string),
Description (string)
ForumThreads:
ThreadId (int32),
ForumId (int32),
UserId (guid),
Subject (string),
Views (int32),
CreateDate (DateTime)
ForumPosts:
PostId (int32),
ThreadId (int32),
UserId (guid),
Post (string),
CreateDate (datetime)
谢谢…
如果您使用成员身份并且不想将aspnet_Users包含在dbml中,则用于显示用户名:
...
LastPostUserId = posts.OrderByDescending(p=>p.PostId).Take(1).Select(p=> Membership.GetUser(p.UserId))
...
使发布的示例更好一点的另一项更改是在posts变量中添加orderbydescending:然后,您可以从select子句中删除重复4次的OrderByDescending:
from forum in Forums
let posts = ForumPosts.Where(p => p.ForumThreads.ForumId.Equals(forum.ForumId)).OrderByDescending(p=>p.PostId)
select new
{
Forum = forum.Title,
Description = forum.Description,
Topics = forum.ForumThreads.Count(),
Posts = posts.Count(),
LastPostId = posts.Take(1).Select(p=>p.PostId),
LastPostThreadId = posts.Take(1).Select(p=>p.ThreadId),
LastPostUserId = posts.Take(1).Select(p=>p.UserId),
LastPostTime = posts.Take(1).Select(p=>p.CreateDate)
}
甚至更清洁:
from forum in Forums
let posts = ForumPosts.Where(p => p.ForumThreads.ForumId.Equals(forum.ForumId))
let lastPost = posts.OrderByDescending(p=>p.PostId).Take(1)
select new
{
Forum = forum.Title,
Description = forum.Description,
Topics = forum.ForumThreads.Count(),
Posts = posts.Count(),
LastPostId = lastPost.PostId,
LastPostThreadId = lastPost.ThreadId,
LastPostUserId = lastPost.UserId,
LastPostUserName = Membership.GetUser(lastPost.UserId),
LastPostTime = lastPost.CreateDate
}
如果没有最新帖子,请测试此代码,我认为如果Take(1)为null,则可能会引发错误。
我有这个: 如何从hashlist中排除“item”?打破了我的头。Linq不想对我开放。
问题内容: 我的SQL代码如下: 等效的linq表达式是什么? 问题答案: 我第一次尝试在 来源 LINQ to SQL中的NOT IN子句
问题内容: T-SQL查询 上面查询的LINQ to Entities替代 在stackoverflow上有很多复杂的子查询,我只想看一个简单的例子,说明如何通过linq完成一个简单的子查询。 问题答案: 简单的答案是使用 “ let” 关键字并生成一个子查询,该查询支持您的主要实体的条件集。 这将在TSQL中创建一个存在块,类似于 它接近您的要求,通常会在SQL Server上创建相同的查询计划
问题内容: 假设我有一个表,在字符串()列中包含格式化的值。这些值应该是由某些const符号分隔的字符串(让它是分号)。例如, 或者 分隔符始终是分隔符,不能是值的一部分。 我需要检查该表中是否已经有一行,并且该列中的值列表至少包含指定的一项。换句话说,我有一个值列表: 分隔符: 我需要编写一个执行此操作的linq-to-sql查询: 应该提到的是,任何搜索值都可以包含其他值。也就是说,我可能正在
问题内容: 请帮助我处理使用带有GROUP和SUM的LINQ进行查询的问题。 我希望: 从db.MYDATABASE中获取前25个项目 将所有结果按bs.PRODCODE分组 按每个bs的总和排序。 公司是“我的公司” 然后将数据管道到我的对象中 我很困惑,因为一旦我将其添加到混音中,我的变量就变得无用了。 问题答案: 我很困惑,因为一旦我将组添加到混合中,我的bs变量就变得无用了。 是的,因为您
本文向大家介绍C#中Linq延迟查询的例子,包括了C#中Linq延迟查询的例子的使用技巧和注意事项,需要的朋友参考一下 提出问题 下面所给代码编译时正常,但是执行时会出错,请指出程序在执行时能够执行到编号为(1)(2)(3)的代码行中的哪一行。 问题分析 其实,发现问题并不难,很显然在执行代码“it => it.Name.Trim()”时会出错,因为集合studentList中第二个学生的Name