方向vs方法中间的vs是什么意思是方法方向道理的组词

[C#].NET/C#编程开发中根据实体类的属性名称和排序方向对集合进行动态排序的方法有哪些? | 图享网
[C#].NET/C#编程开发中根据实体类的属性名称和排序方向对集合进行动态排序的方法有哪些?
郑重申明:本文未经许可,禁止任何形式转载
问题描述在.NET/C#编程开发中,有哪些更简单的方式来实现根据实体类的属性名称和排序方向对指定集合进行动态的排序呢?
比如,当前有一个数据集合list,现在允许用户可以根据自己的需求选择排序的属性以及排序的方向,这些选项用户是可以通过UI来进行选择的。这里的排序字段即为属性的名称,是一个字符串。
那么,现在是否有办法使用LINQ来实现以上的具体需求,而不使用条件判断(比如:if/else,switch)。
需要实现的方式类似如下:
query = query.OrderBy(x =& x.&ProductId&);
方案一使用反射Reflection和LINQ的Lambda表达式来处理,如下:
System.Reflection.PropertyInfo prop = typeof(YourType).GetProperty(&PropertyName&);
query = query.OrderBy(x =& prop.GetValue(x, null));
或者,最好使用PropertyDescriptor,如下:
PropertyDescriptor prop = TypeDescriptor.GetProperties(typeof(YourType)).Find(&PropertyName&);
query = query.OrderBy(x =& prop.GetValue(x));
方案二使用表达式树Expression Tree来创建IQueryable的扩展方法,以下静态扩展方法提供了IQueryable的OrderBy和OrderByDescending的方法:
public static class IQueryableExtensions
public static IOrderedQueryable&T& OrderBy&T&(this IQueryable&T& source, string propertyName)
return source.OrderBy(ToLambda&T&(propertyName));
public static IOrderedQueryable&T& OrderByDescending&T&(this IQueryable&T& source, string propertyName)
return source.OrderByDescending(ToLambda&T&(propertyName));
private static Expression&Func&T, object&& ToLambda&T&(string propertyName)
var parameter = Expression.Parameter(typeof(T));
var property = Expression.Property(parameter, propertyName);
var propAsObject = Expression.Convert(property, typeof(object));
return Expression.Lambda&Func&T, object&&(propAsObject, parameter);
调用示例:
query = query.OrderBy(&ProductId&);
方案三另外一个基于表达式树Expression Tree的扩展类和静态扩展方法,如下:
public static class IQueryableExtensions
public static IOrderedQueryable&T& OrderBy&T&(this IQueryable&T& query, string propertyName, IComparer&object& comparer = null)
return CallOrderedQueryable(query, &OrderBy&, propertyName, comparer);
public static IOrderedQueryable&T& OrderByDescending&T&(this IQueryable&T& query, string propertyName, IComparer&object& comparer = null)
return CallOrderedQueryable(query, &OrderByDescending&, propertyName, comparer);
public static IOrderedQueryable&T& ThenBy&T&(this IOrderedQueryable&T& query, string propertyName, IComparer&object& comparer = null)
return CallOrderedQueryable(query, &ThenBy&, propertyName, comparer);
public static IOrderedQueryable&T& ThenByDescending&T&(this IOrderedQueryable&T& query, string propertyName, IComparer&object& comparer = null)
return CallOrderedQueryable(query, &ThenByDescending&, propertyName, comparer);
/// &summary&
/// 使用TSource属性名称创建Queryable查询方法
/// &/summary&
public static IOrderedQueryable&T& CallOrderedQueryable&T&(this IQueryable&T& query, string methodName, string propertyName,
IComparer&object& comparer = null)
var param = Expression.Parameter(typeof(T), &x&);
var body = propertyName.Split('.').Aggregate&string, Expression&(param, Expression.PropertyOrField);
return comparer != null
? (IOrderedQueryable&T&)query.Provider.CreateQuery(
Expression.Call(
typeof(Queryable),
methodName,
new[] { typeof(T), body.Type },
query.Expression,
Expression.Lambda(body, param),
Expression.Constant(comparer)
: (IOrderedQueryable&T&)query.Provider.CreateQuery(
Expression.Call(
typeof(Queryable),
methodName,
new[] { typeof(T), body.Type },
query.Expression,
Expression.Lambda(body, param)
调用示例如果使用Entity Framework 或者 LINQ TO SQL:
query = query.OrderBy(&ProductId&);
query = query.OrderBy(&ProductCategory.CategoryId&);
如果未使用Entity Framework 或者 LINQ TO SQL:
query = query.OrderBy(&ProductCategory&, comparer);
方案四基于IEnumerable的扩展类和静态扩展方法,如下:
using System.Collections.G
using System.L
using System.R
using System.Linq.E
public static class EnumerableHelper
static MethodInfo orderBy = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(x =& x.Name == &OrderBy& && x.GetParameters().Length == 2).First();
public static IEnumerable&TSource& OrderBy&TSource&(this IEnumerable&TSource& source, string propertyName)
var pi = typeof(TSource).GetProperty(propertyName, BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance);
var selectorParam = Expression.Parameter(typeof(TSource), &keySelector&);
var sourceParam = Expression.Parameter(typeof(IEnumerable&TSource&), &source&);
Expression.Lambda&Func&IEnumerable&TSource&, IOrderedEnumerable&TSource&&&
Expression.Call
orderBy.MakeGenericMethod(typeof(TSource), pi.PropertyType),
sourceParam,
Expression.Lambda
typeof(Func&,&).MakeGenericType(typeof(TSource), pi.PropertyType),
Expression.Property(selectorParam, pi),
selectorParam
sourceParam
.Compile()(source);
public static IEnumerable&TSource& OrderBy&TSource&(this IEnumerable&TSource& source, string propertyName, bool ascending)
return ascending ? source.OrderBy(propertyName) : source.OrderBy(propertyName).Reverse();
基于IQueryable的扩展类和静态扩展方法,如下:
using System.L
using System.Linq.E
using System.R
public static class IQueryableHelper
static MethodInfo orderBy = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(x =& x.Name == &OrderBy& && x.GetParameters().Length == 2).First();
static MethodInfo orderByDescending = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(x =& x.Name == &OrderByDescending& && x.GetParameters().Length == 2).First();
public static IQueryable&TSource& OrderBy&TSource&(this IQueryable&TSource& source, params string[] sortDescriptors)
return sortDescriptors.Length & 0 ? source.OrderBy(sortDescriptors, 0) :
static IQueryable&TSource& OrderBy&TSource&(this IQueryable&TSource& source, string[] sortDescriptors, int index)
if (index & sortDescriptors.Length - 1) source = source.OrderBy(sortDescriptors, index + 1);
string[] splitted = sortDescriptors[index].Split(' ');
var pi = typeof(TSource).GetProperty(splitted[0], BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.IgnoreCase);
var selectorParam = Expression.Parameter(typeof(TSource), &keySelector&);
return source.Provider.CreateQuery&TSource&(Expression.Call((splitted.Length & 1 && string.Compare(splitted[1], &desc&, StringComparison.Ordinal) == 0 ? orderByDescending : orderBy).MakeGenericMethod(typeof(TSource), pi.PropertyType), source.Expression, Expression.Lambda(typeof(Func&,&).MakeGenericType(typeof(TSource), pi.PropertyType), Expression.Property(selectorParam, pi), selectorParam)));
阅读了该文章的人还浏览了...
本文永久链接: >>
分享扩散:
电子邮箱(必填)> 问题详情
知识创造中,()的引领是基础和方向。方向对了,才能使知识创造和经营之路正确,才能获得真知。A、领
悬赏:0&答案豆
提问人:匿名网友
发布时间:
知识创造中,()的引领是基础和方向。方向对了,才能使知识创造和经营之路正确,才能获得真知。A、领导B、组织C、价值观D、市场
您可能感兴趣的试题
1根据中华人民共和国最高人民法院《关于审理专利纠纷案件适用法律问题的若干规定》的司法解释中规定:侵犯著作权的诉讼时效自著作权人知道或者应当知道侵权行为之日起计算。权利人超过( )起诉的,如果侵权行为在起诉时仍在持续,在该著作权保护期内,人民法院应当判决被告停止侵权行为;侵权损害赔偿数额应当自权利人向人民法院起诉之日起向前推算两年计算。A、三年B、两年C、一年D、五年2影响知识创造的因素无外乎( )和外因。A、主观因素B、内因C、心理因素D、内在知识储备3《专业技术人员继续教育规定》指出:专业技术人员参加继续教育的时间,每年累计应不少于( )学时。A、60B、70C、80D、904无论是否按商业价值划分,知识的创造和经营应当有一个基本准则,就是符合人类共同的、最基本的价值观要求,符合法律的要求。判断对错
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
每天只需0.4元
选择支付方式
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:跪求红蝶平a技巧尤其是那种旋转的,预判方向对也打不中啊?好像只要贴着红蝶就打不中?【第五人格吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:281,226贴子:
跪求红蝶平a技巧尤其是那种旋转的,预判方向对也打不中啊?好像
跪求红蝶平a技巧尤其是那种旋转的,预判方向对也打不中啊?好像只要贴着红蝶就打不中?
第五人格,高清第五人格直播平台,众多玩家齐开播!热门游戏直播平台,看第五人格直播,尽在虎牙直播第五人格直播专区!
蓄力螺旋刀法
贴吧热议榜
使用签名档&&
保存至快速回贴走自己的路 vs 顺势而为,到底哪个才对呢? - 简书
走自己的路 vs 顺势而为,到底哪个才对呢?
很多人认为移动互联网时代,同质化的价值将没有竞争力,我们需要「走自己的路」。但同时也有一种普遍说法是:我们要「顺势而为」,毕竟站在风口上,连猪都能飞。确实,当我们面对人生的选择,我们应该勇敢走自己的路,不该一味盲从。但这样一来,岂不是要大家违背潮流?「逆势而为」可并非良策呀!在这里,我们用疑云图体现冲突:
我们要"走自己的路",好处是“发挥优势及个人独特价值”;我们要"顺势而为",好处是“能够更有效的适应变化及把握机会”。在大多数情况下,我们会陷入两难困境。我们到底应该怎么做呢? 走自己的路?又或是顺应潮流呢?实际上,关于这类“顺势而为”、“发挥优势”、“走自己的路”的文章数不胜数,无数的方法及建议让人眼花缭乱。通常应对有三种做法:
1,坚持走自己的路,基于个人天赋及热情构建独特竞争优势;
2,顺势而为,在风口上构建独特竞争优势;
3,在风口上并结合天赋及热情,构建独特竞争优势。
在这里,我们将重点介绍第3种做法。
预测趋势,探寻新洞见
很多人都认为自己是“顺势而为”,而实际上确是在“盲目从众”。那么,“顺势而为”与“从众”最本质的区别在哪里呢?两者最本质的差别在于是否拥有“新洞见”。这个“新洞见”是指在某个领域,你要有超前的认知:在大多数人相信X的情况下,你首先认知到事实确是X的对立面。“新洞见”应该有两个特性:1、未被大多数人所认知;2、已经证实,并且形成“可用的知识”。例如,当大多数商家还在走付费杀毒软件之路的时候,傅盛拥有了新洞见“通过杀毒免费吸引海量用户,可以产生更大的商业模式”,因此有了360安全卫士。探寻新洞见,最佳的领域在趋势+个人擅长的交叉处。因为在趋势将要起来的情况下,设计领域往往是大家所未能认知的,结合“趋势+个人优势”更容易产生新的洞见。拥有新洞见的不乏其人,但为什么仍然会有很多人,很多公司无法抓住大势,乘势而起呢?我们接下来讲讲原因。利用趋势,在战略窗口期(阻力最小)关闭前构建独特竞争优势当我们利用趋势,利用早了,投入大量的资源,但确极有可能成为先烈;利用晚了,也极有可能陷入千军万马走独木桥的困境。我们必须走在阻力最小的路上。“顺势而为”其成功背后的核心在于找到“阻力最小之路”。走在“阻力最小之路 ”的好处在于:
面临的障碍最小;
有足够的试错空间及较低的试错成本;
容易获得资源,形成竞争壁垒。
牛人之所以牛就在于:他建立了很好的视野,在这样的视野下,从容打下从0到1的基础,然后用更好的方向,弥补执行力的不足。好的战略,往往是走在阻力最小的路上,它不依赖于好的执行力。当大多数人没有认知到新的事实情况下,我们往往拥有足够的试错空间及时间,也可以用较低的成本进行试错;当趋势逐步普及,甚至趋势背后新的方法论形成,从而一旦有热点,往往会有太多人争抢千军万马走独木桥。阻力最小之路,就存在于大多数人未能认知到成为热点争相参与之间的战略窗口期。如何找到阻力最小之路?首先是预测,我们需要站到一个更大的高度回看现在,用预测在大方向上的清晰,去极大地缓解你在执行方面的依赖。其次是侦察兵模式,不断试错,用资源换机会。很多情况下我们唯一核心的资源就是时间资源,就是不断试错。侦察兵模式的本质是探索潮流背后的规律,从而形成新的洞见及可用的知识。第三,破局点预测之后,就是找到破局点,要在战略窗口期关闭之前找到那个一举撬动全局的关键点,对个人来说就是构建一个决定性的竞争优势。破局点一定要配合大方向,配合整个大预测。苹果手机就是这样的破局点。通过手机这个点切下去,整个行业都被改造了。破局点的寻找,本质上是产品形态的需求。在产品形态和用户体验上,找到用户为王的那个点,可以把整个行业都掀掉。而在预测-侦察兵模式-找到破局点的过程中,有2点非常重要:o清晰思考:我们的决策要基于规律及事实,要提升第一次就做对的概率;o要快速积累可用的知识。最后,预测、侦察兵模式、破局点背后的核心是什么呢?就是利用战略窗口期,走在阻力最小的路上,制造火车头。底线思维无论我们选择“走自己的路”或者“顺势而为”我们都需要注意要有底线思维,预防犯颠覆性的错误。当我们坚持“顺势而为”,需要注意:1、避免孤注一掷,陷入颠覆性的风险曾经的手机巨头,摩托罗拉超前的钛星计划,投入巨额的预算,但最终钛星计划没发成功。同时,也错过了数字通信时代,最终没落。2、要避免跟风,盲目追求新的事物,而没有在任何领域形成积累及构建优势。结语成为站在风口上的猪,这是很多人追求成功的梦想。如果你想控制好节奏,则需要注意:
在趋势+个人擅长的交叉处,深耕并探索新洞见
利用趋势,在战略窗口期(阻力最小)关闭前构建独特竞争优势
要有底线思维。
思维咖、拆书家、GTD达人,微信ID:shaimer0502a
首先这些文章的作者是微博名为水晶苍蝇拍老师的文章,再次感谢万能的网络,我找到了这些文章并进行汇总,供自己学习并分享给大家。第一部分我始终没有找到,如果有人有,希望分享给我,谢谢! 如果有侵权,请联系我删除,谢谢! 微博投资感悟摘录(二) (8:17:5...
目目录 Day 1 审视时间 №1 本书导读 №2 思考与讨论 №3 对待时间的态度 №4 六种时间视角 №5 做值得做的事 №6 挖掘时间的深度 №7 树立最高目标 №8 今日总结 Day 2 行动准则 №9 思考与讨论 №10 发现更多可能 №11 怎样选择 №12 即...
1.容易影响心情。因为西藏行,有点精神恍惚,而且真的有点追求完美,不做完就不想放下,即使明天有很多事要做。
1.室友丢钱,急于摆脱自己的嫌疑,反而显得很有嫌疑。 2.情绪化。精神恍惚,影响打工,影响学习,影响工作。 3.要想成为朋...
一直都想去方特放荡不羁一下,奈何计划赶不上变化,从最初想法形成到真的出发前往,时间已经过去好多年。但,终于去了。过程体味了,结果也让自己满意,这让我最近幸福感爆棚。最好的生活莫过于你在想要的路上一步一步靠近,然后实现。 那天,天气很好,天空是一望无际没有瑕疵的蓝,偶尔风吹过...
小蝶是DADA曾经的一个室友。 在锥子脸双眼皮大眼睛长腿美女横行的时代,我觉得小蝶很漂亮。白净的皮肤,不算小的单眼皮眼睛,个子不够一米六,但还算是前突后翘。毕业的时候有人抓拍了一张小蝶的回眸一笑,整齐的头发刚到肩膀,六四分的头发遮住了美女会觉得有些偏大的脸。这张照片成了我毕...
孤独感还是像破了洞的纸窗 呼呼的往心里灌风 口子偏还越裂越大 风里夹了烟 呛出眼泪来
自从姚盛杰加入乐队后,我们的排练阵地就转移到了学校音乐教室旁的一间小屋子里。毕竟,陆磊的房间容纳不了一个架子鼓,本就破破烂烂的墙面要是再被鼓声震两下,大概会像雪花似的落下来吧。 每周二和周四放学后我们都会在这里集合,虽然每次排练只有两小时左右,但这段时间夹在上学和回家之间,...
我忘记了姓名与过去,忘记了伙伴和信仰; 我懵懵懂懂,原本黑色的生命中,只留一轮斜阳与明月; 我过着枯燥而安静的生活,只为等待着你的出现; 我终于成为了你想要的那种人,可是你依然不属于我。在篮球比赛中,出界的时候为什么两对的球员都指着不同的方向,是什么意思?_百度知道
在篮球比赛中,出界的时候为什么两对的球员都指着不同的方向,是什么意思?
我有更好的答案
都说该自己发球
往自己防守的那个半场指···后场球的意思···
那裁判指的所有的方向也应该是拥有球权方的后场么
判的手势给的是进攻方向,在任何情况下由裁判判定为球该向哪方进攻,就指向那边,然后向那边进攻的队获得球权。
额 ·我好像搞错了···出界的时候···球员都会往对方那边指···是前场球的意思···干扰你了···不好意思
采纳率:24%
他们都希望是自己队的球权,所以手有所指向,他的深沉含义是通过手势想影响裁判判罚
误导裁判出现失误,希望把球权判给自己,不过现在关键时间都有录像回放了
因为都说是对方把球弄出界的啊
其他1条回答
为您推荐:
其他类似问题
篮球比赛的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 意思是方法方向道理的词语 的文章

 

随机推荐