c#里使用linq的问题,报错说不支持查询运算符last

linger_liang 2009-08-25 12:01:28
var query = from a in db.SysMenuTbl
where a.ParentMenuID == 0
select a;

string mmnanme = query.Last().MenuName;

就是从数据库表里读数据,然后把最后一条的一个字段内容给一个变量,就这么简单,但是运行报错说
System.NotSupportedException: 不支持查询运算符“Last”
...全文
761 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
huyou1983218 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 linger_liang 的回复:]
引用 4 楼 jzywh 的回复:
var query = from a in db.SysMenuTbl
  where a.ParentMenuID == 0
  orderby a.**** //根据你自己的排序规则
  select a;


string mmnanme = query.FirstOrDefault().MenuName;


不能用firstordefault,我是要取query这个结果集的最后一个来判断这个query已经运行到结尾了。
[/Quote]
orderby a.**** //根据你自己的排序规则
这句没看到吗?desc 倒序排列不就是第一条就是最后一条了?
  • 打赏
  • 举报
回复
非常反对使用

query.ToList().Last().MenuName;

或者

query.AsEnumerable().Last().MenuName;

这种做法。


知道Linq to SQL(其它Linq Provider也类似)的特点么?它自动编译为SQL语句然后拿出结果,而不是把数据逐一搜索到内存里再来筛选。


我是很不愿意听到有些人骂vs这种IDE让很多程序员变成笨蛋的。但是,有时候工具放在一些不求甚解的人手中,确实会害了这些人。这主要是人的原因,而不能怪工具。对于Linq也是这样,一定要懂得一些深度的知识,才能正确使用Linq。
yezie 2009-08-27
  • 打赏
  • 举报
回复
直接排序,取first。。。。。。。。
jzywh 2009-08-25
  • 打赏
  • 举报
回复
var query = from a in db.SysMenuTbl
where a.ParentMenuID == 0
orderby a.**** //根据你自己的排序规则
select a;


string mmnanme = query.FirstOrDefault().MenuName;
linger_liang 2009-08-25
  • 打赏
  • 举报
回复
没有高人来解答一下么?
caotoulei 2009-08-25
  • 打赏
  • 举报
回复
应该可以的哈,实在不行,就试下tolist()之后,得到count()值后,取最后一个。
jzywh 2009-08-25
  • 打赏
  • 举报
回复
重新order一下, 用 query.FirstOrDefault()
chen_ya_ping 2009-08-25
  • 打赏
  • 举报
回复
var query = from a in db.SysMenuTbl
where a.ParentMenuID == 0
select a;

string mmnanme = query.AsEnumerable().Last().MenuName;
阿非 2009-08-25
  • 打赏
  • 举报
回复
Last() 是 LINQ to Object 部分的, Object 一般指的是数组 或 实现了IEnumerable 接口的集合
-----------------------------------------------------------------------------------------

Last, LastOrDefault
这些方法的转换对于有序集而言是可行的,但目前 LINQ to SQL 未对它们进行转换。

http://msdn.microsoft.com/zh-cn/express/bb399342.aspx
jzywh 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 linger_liang 的回复:]
var query = from a in db.SysMenuTbl
                        where a.ParentMenuID == 0
                        select a;

          string mmnanme = query.Last().MenuName;

就是从数据库表里读数据,然后把最后一条的一个字段内容给一个变量,就这么简单,但是运行报错说
System.NotSupportedException: 不支持查询运算符“Last”

[/Quote]

要么你用string mmnanme = query.ToList().Last().MenuName;
jzywh 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 linger_liang 的回复:]
jzywh

(江大鱼) :
为什么用firstordefault就可以,用last就不行呢?
[/Quote]

sql 里面有 select top 1...

你见过有 select last 1... 么?
linger_liang 2009-08-25
  • 打赏
  • 举报
回复
自己再顶顶
linger_liang 2009-08-25
  • 打赏
  • 举报
回复
jzywh

(江大鱼) :
为什么用firstordefault就可以,用last就不行呢?
linger_liang 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jzywh 的回复:]
var query = from a in db.SysMenuTbl
  where a.ParentMenuID == 0
  orderby a.**** //根据你自己的排序规则
  select a;


string mmnanme = query.FirstOrDefault().MenuName;
[/Quote]

不能用firstordefault,我是要取query这个结果集的最后一个来判断这个query已经运行到结尾了。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧