我有以下对象:
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);
}
任何想法?
答案 0 :(得分:2)
好的。我需要做的就是在IEqualityComparer<T>
课程中实施Line
。
答案 1 :(得分:1)
lines
是IQeryable<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);