瘦人说

LINQ To Weibo 支持对象过滤

在LINQ To Weibo上添加一功能,就是查询后的二次过滤,主要是弥补新浪API查询条件有限,而又想增强查询结果集的过滤。主要是在IQueryable查询之后提供的LINQ To Object的二次过滤,可以使用完整的LINQ API(Enumerable class),甚至可以进行分组操作。

使用方式很简单,在创建查询对象之后,设置它的Provider对象上的UseObjectFilter属性,Boolean类型。

IQueryableWeiboData<Weibo> data = new QueryableWeiboData<Weibo>();
data.Provider.UseObjectFilter = true; // 开启对象过滤

设置完成之后边可以进行而外的查询操作了,不过要注意,对象过滤是在新浪微博查询返回的结果集中进行的,分页查询的信息将由可能不准确。Feature, BaseApp, Trend.KeyWord不起作用,因为微博对象里面不存在元字段。

data.Where(w => w.Feature == Feature.ALL && !w.BaseApp && w.Text.Contains("我")).Take(20);

在开启对象过滤的情况下,上面表达式中的w.Text.Contains(“我”)将会起作用,返回结果集中内容包含“我”字的微博。当然有人会说,为什么不利用结果集对象写第2个表达式,直接外部使用LINQ To Objects,如果一个就能完成的,为什么需要两个呢,而且如果你用了QueryableWeiboData对象,想先得到微博API的结果集,再进行二次过滤会让你的代码很傻逼的。

再举几个例子吧:
根据用户id分组

data.Where(w => w.Feature == Feature.ALL && !w.BaseApp).GroupBy(w => w.User.Id);

检测是否有某人的微博

data.Any(weibo => weibo.User.Id == 10000);

除去含有“9-18”的微博

data.Except(weibo => weibo.Text.Contains("9-18"));

等等。

其次,我还顺便把非表达式加上了,新浪API中只有base_app这个字段用到。以后可以使用!weibo.BaseApp,weibo.BaseApp,weibo.BaseApp == true(or false),!weibo.BaseApp == true(or false)了。

related:LINQ To Weibo

Comments

Proudly published with Hexo