IQueryable .Except()不是我期望的结果!

时间:2010-06-21 06:45:41

标签: linq

我有以下对象:

Line{ String Content; Type type;}

我有IQeryable<Line>行,我执行操作。我选择了line.Content.Contains('x') = list1的某些行,现在正试图到达其余的行,即行 - list1,这是使用

list2 = lines.Except(list1); 

但结果为list2 = lines

代码:

private
     IQueryable<Line>
     ExtractLines(
     IQueryable<Line> allLines, 
     String keyword, 
     ref IQueryable<Line> hits)
    {

        hits = allLines.Where(lx => lx.Content.Contains(keyword));  

        return allLines.Except(hits); 
    }

任何想法?

2 个答案:

答案 0 :(得分:2)

好的。我需要做的就是在IEqualityComparer<T>课程中实施Line

答案 1 :(得分:1)

linesIQeryable<Line>。如果不保存结果,则每次从中进行选择时都会运行。如果Line未覆盖Equals==,则每次都会创建不同的对象,因此Except无法从新对象中删除上一个对象。

现在,很多都缺失了,但请尝试:

var linesList = lines.ToList(); // get results ones
var hasX = lines.Where(line => line.Content.Contains('x'));
var noX = lines.Except(hasX);