新足迹

 找回密码
 注册

精华好帖回顾

· 大家一起来讨论,找出最适合自己孩子的管教方法(所有年龄段) (2010-2-16) 第一名 · 《年底税务知识分享 (1) -最容易被忽视的税务回扣》 (2008-6-9) Artcore
· 5500公里的路呀,自驾车中部+南澳游攻略(14天) (2007-7-16) sylviaqian · 下乡记系列之二 —— 食篇 · 联合国式的圣诞家宴 (2009-3-16) Tiger_Karen
Advertisement
Advertisement
查看: 1180|回复: 3

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

头像被屏蔽

禁止发言

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

instance method应该比extension method优先。

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

禁止发言

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

发表回复

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

本版积分规则

Advertisement
Advertisement
返回顶部