新足迹

 找回密码
 注册

精华好帖回顾

· Lanshan: 那柔软绵滑入口即化的 - 树莓戚风蛋糕卷 Raspberry Chiffon Swiss Roll (2012-11-23) lanshan · 初见。台湾西行 (完结) 撒花!!! 来个没奖问答吧 (2019-3-8) al_man
· 那一群歪瓜劣枣的兄弟姐妹,那一段患难与共的日子啊 (2006-3-30) horseanddragon · E&E -- 家常烤鱼 (2009-11-8) 闲夏采薇
Advertisement
Advertisement
查看: 1268|回复: 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
返回顶部