linq ,语句是 query = query.OrderByDescending(NewsTj => NewsTj.Id); 为啥不按倒序进行排序呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linq ,语句是 query = query.OrderByDescending(NewsTj => NewsTj.Id); 为啥不按倒序进行排序呢?相关的知识,希望对你有一定的参考价值。
参考技术A OrderByDescending(方法通过使用延迟执行实现。 即时返回值为一个对象,该对象存储执行操作所需的所有信息。 只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。-----------
以上是官方资料,说的直白一些,你的query可能还没输出,中间结果就被别的操作给覆盖了。
本人倒是有一次出现这样的情况,是因为数据量庞大,延迟处理导致输出序列阶段有效。
----
解决思路:即时输出。
使用ToXXXX() 方法。
------
如果不是以上原因,请放出所有源程序,一句代码不够。本回答被提问者采纳 参考技术B query = query.OrderByDescending(NewsTj => NewsTj.Id).ToList(); 参考技术C 问道“不知
如何在 Linq Query 中执行 If 语句
【中文标题】如何在 Linq Query 中执行 If 语句【英文标题】:How to do If statement in Linq Query 【发布时间】:2010-11-12 07:33:06 【问题描述】:我目前有一个包含以下内容的列表
CountryCode (string)
CountryStr (string)
RegionStr (string)
RegionID (int)
AreaStr (string)
AreaID (int)
这是一组扁平的链接数据(基本上是我存储的联合搜索的结果)
MVC 路由只会传递一个字符串,然后我需要将其与 heirachy 中正确级别的数据进行匹配。 所以我试图查询 CountryStr 如果它没有产生结果,那么该区域然后是该区域;但我需要做一些查询,例如......
var datURL = (from xs in myList
//query 1
where xs.RegionStr == rarREF
select new
regionID = xs.RegionId,
CountryID = xs.CountryCd
//IF theres no results
where xs.AreaStr == rarREF
select new
AreaID = xs.AreaID
regionID = xs.RegionId,
CountryID = xs.CountryCd
).ToList();
我目前看到的唯一方法是分别运行每个查询,然后检查哪些返回值并使用那个。我希望有一个更聪明、更清洁的方法。
【问题讨论】:
【参考方案1】:阅读起来并不容易,但您可以使用类似这样的方式一次性完成:
var datURL = (from xs in myList
where xs.RegionStr == rarREF || xs.AreaStr == rarREF
select new
AreaID = (xs.AreaStr == rarRef ? xs.AreaID : default(int)),
RegionID = xs.RegionId,
CountryID = xs.CountryId
).ToList();
如果稍微重写查询,也可能更容易阅读:
var datURL = (from xs in myList
let isArea = xs.AreaStr == rarREF
let isRegion = xs.RegionStr == rarREF
where isRegion || isArea
select new
AreaID = (isArea ? (int?)xs.AreaID : null),
RegionID = xs.RegionId,
CountryID = xs.CountryId
).ToList();
如果我们保存比较结果,以后可以重复使用。我还向int?
添加了一个强制转换,以展示如何使用可为空的值而不是使用 0 作为“无区域”值。
【讨论】:
在 çağdaş 中将 null 替换为 default(int) 似乎有点像 Id 期望的那样。那么 where 语句是说如果它没有返回任何结果,请按照我的想法尝试 AreaStr 吗?有了这个,我猜我可以很容易地添加更多:op 我们假设 Region 字符串永远不会匹配 Area 字符串,因此 where 将返回 Region 匹配或 Area 匹配的列表项。然后在选择中,我们再次检查匹配是区域还是区域。我将使用可能更易于阅读的版本进行编辑。 我对这个 linq 百灵鸟所能取得的成就印象深刻。非常甜蜜。感谢您的帮助!【参考方案2】:您不是在寻找or
运营商吗?这不会产生您想要的结果吗?
var datURL = (from xs in myList
where xs.RegionStr == rarREF || xs.AreaStr == rarREF
select new
AreaID = xs.AreaStr == rarREF ? xs.AreaID : default(int)
regionID = xs.RegionId,
CountryID = xs.CountryCd
).ToList();
【讨论】:
以上是关于linq ,语句是 query = query.OrderByDescending(NewsTj => NewsTj.Id); 为啥不按倒序进行排序呢?的主要内容,如果未能解决你的问题,请参考以下文章
Linq to entity 使用“Func”在生成匿名对象的选择语句中创建属性
LINQ 学习路程 -- 查询操作 Deferred Execution of LINQ Query 延迟执行