新足迹

 找回密码
 注册

精华好帖回顾

· BMW M2 Pure 跨州购车经历 【更新- BC 鍛造轮圈】【更新- KW V3 绞牙避震】【天蝎全段排气】【M方向盘】 (2018-4-2) kevin_au · 今天辞职了,谈谈childcare的工作(新贴在亲子育儿版,谢谢各位关注 351楼,来点正能量吧,childcare 也是有好处的 (2010-7-6) 冰咖啡
· 圆头之旅 (2008-11-7) 仰望星空 · 昨夜风疏雨骤 (2005-9-8) astina
Advertisement
Advertisement
查看: 1229|回复: 3

有没有什么办法让linq不要去调用它自己的extension method [复制链接]

头像被屏蔽

禁止发言

发表于 2012-12-4 14:07 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
而是调用我的。

var t = from item in context.TestItemList
                        where item.StrTitle != ""
                        select item;

编译以后就成为
IQueryable<TestItem> t = context.TestItemList.Where<TestItem>(
Expression.Lambda<Func<TestItem, bool>>( Expression.NotEqual( Expression.Property( CS$0$0000 = Expression.Parameter(typeof(TestItem), "item"),  (MethodInfo) methodof(TestItem.get_StrTitle) ),  Expression.Constant("", typeof(string)),  false,  (MethodInfo) methodof(string.op_Inequality) ),  new ParameterExpression[] { CS$0$0000 }));

我在TestItemList的类里面定义了个
public IQueryable<Ts> Where<Ts>(Expression<Func<Ts, bool>> predicate)

但是它还是去调用.net的extension method. 在 public static class Queryable里面的

public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate) { }

按道理讲,如果extension method和类成员函数重名,应该是选择成员函数的。
      
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2012-12-4 14:17 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
http://social.msdn.microsoft.com ... d-9e56-0cc19c00d33d

instance method应该比extension method优先。

发表于 2012-12-4 16:52 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
能说一下你这样做的好处么?
头像被屏蔽

禁止发言

发表于 2012-12-4 19:25 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我把.net自己的where函数给复制出来,想弄个断点,看看里面的执行情况。
虽然可以step into .net source,但是没法add to watch.

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部