我正在尝试将过滤器添加到.NET 3.5 SP1中的自定义对象列表中。 我的对象看起来像这样:
public class Message {
string Filename;
DateTime Timestamp;
List<ClassA> A;
List<ClassB> B;
// ...
}
public class ClassA {
string Name;
// ...
}
public class ClassB {
string Description;
// ...
}
我有一个ObservableCollection来保存我的所有消息;每条消息有2个或更多ClassA,0到n ClassB。我已经设置了一个ListView来显示消息(通过CollectionViewSource排序)。
现在我想在我的UI中添加两个ComboBox,以允许过滤此ListView。当然它们不应该包含重复项,所以我只想要当前显示在ListView中的所有消息的不同ClassA.Names和ClassB.Descriptions。此外,我希望一个ComboBox的过滤器也适用于另一个。
ListView的过滤已经完成并正常工作,但我无法弄清楚如何填充ComboBox。
答案 0 :(得分:0)
这应该可行,其中Messages是过滤后的消息集合:
var distinctNames =
(from message in Messages
from a in message.A
select a.Name).Distinct();
var distinctDescriptions =
(from message in Messages
from b in message.B
select b.Description).Distinct();
答案 1 :(得分:0)
如果我理解你想要根据类型List<Messages>
的成员集合属性的string
值过滤A
集合并输入B
。
如果是这样,这样的事情对你有用:
var msgs = messagies.Select(ms=>ms).Where(ms=>ms.A.Exists(cla=>cla.Name.StartsWith("NameToSearch") &&
ms.B.Exists(clb=>clb.Description.StartsWith("DescriptionToSearch"))));
请注意,这里我将 AND 运算符放在查询和StartsWith
字符串函数中。您可以使用更适合您需求的功能和操作符来替换它们。
编辑:
好的一点是,通过在这种情况下使用 ,使它们也不区分大小写,例如,
StartsWith("DescriptionToSearch",StringComparison.InvariantCultureIgnoreCase))