【发布时间】:2009-11-05 05:43:46
【问题描述】:
我有一个 LINQ 结果集,我正试图以一种奇怪而奇特的方式进行过滤。
List<string> MyDomains = [Code to get list];
var x = (from a in dc.Activities
where a.Referrer != null
&& a.Referrer.Trim().Length > 0
&& !a.Referrer.Contains("localhost")
&& a.SearchResults.Count() == 0
orderby a.ID descending
select a)
.Take(20);
既然我已经解决了这个问题,让我更好地解释一下。 MyDomains 是一个字符串列表;每一个都是我拥有的一个根域。
a.Referrer 是一个字符串,其中包含从 GET 到我的一个网站的引荐来源网址。请注意,此字符串将包含子域、文件夹、文件和查询字符串。
我想通过 a.Referrer 的根域在 MyDomains 列表中过滤 x。也就是说,我想用这种方式返回所有不匹配的记录。结果集最终应该包含其 Referrer 不是我的域之一的活动。
我一直在学习 Lambda 表达式,但到目前为止还无法制作一个来实现这个目标,因为它实际上需要一个 where 子句,其中包含逻辑(可能是循环、子字符串等)。
目前我正在考虑将 X 转换为列表,手动过滤它们,然后将列表绑定到目标控件而不是绑定 X。我有一个扩展方法来获取 Uri 的根域和另一个来确定是否这是我的域,但不能将它们放在此处的 Lambda 中,因为它们“不支持对 SQL 的翻译”。
除了架构上的分歧,我如何在我的 LINQ 查询中实现这一点?
编辑:注意我想在查询中执行此操作,因此在添加 .Take(20) 之前删除匹配的记录。我希望每次都获得相同数量的结果,而无需调用数据库以获得更多结果。
【问题讨论】:
标签: linq expression-trees