新足迹

 找回密码
 注册

精华好帖回顾

· adige谈星之温暖美声-彭佳慧 (2008-8-31) adige · 2008年家乡年夜饭, 想念北京~~ (2008-2-10) datou2z
· 请问35岁了再改行学IT,还有戏吗? (2005-6-26) kingwood · (8.21更新)行车记录仪搭档----口红姬电力通 Blackvue Power Magic Pro安装DIY (福特) (更新奥德赛示意图) (2017-8-7) 十五的灯笼
Advertisement
Advertisement
查看: 1112|回复: 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
返回顶部