新足迹

 找回密码
 注册

精华好帖回顾

· 我先抛个小砖头。。CLARINS莲花油的使用报告 (2005-1-4) liz · 下乡记系列之二 —— 食篇 · 联合国式的圣诞家宴 (2009-3-16) Tiger_Karen
· 长篇连载--忽尔十年(#223精彩更新,#102有pp的封面) (2009-2-15) 哈他真的生气了 · 北陆枫行--- 一个人的追枫之旅 (京都,东京,完结) (2016-8-11) woodywup
Advertisement
Advertisement
查看: 1181|回复: 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
返回顶部