如何在Silverlight中使用另一个可观察集合对一个可观察集合进行排序?

3
我有一个名为"A"的字符串可观察集合,其中包含一些值。另一个名为"B"的字符串可观察集合也包含一些值。
"A"有13个值,而"B"有5个值。 "A"包含"B"的值但顺序不同。我希望在组合框中,"B"的值在"A"中优先显示。
因此,我需要编写一些Linq查询语句来实现。请提供一些想法。

这两个中的哪一个集合绑定到了combobox?“获取第一优先级”是什么意思不太清楚。 - Dennis
@Dennis,我有两个ComboBox,一个是“起始位置”(from location),另一个是“目的地”(to location)。目的地的ObservableCollection项包含了起始位置的项。我想让起始位置的项排在目的地ObservableCollection的顶部。 - nichu09
2个回答

1

我手头没有IDE,但是类似这样的东西应该可以解决问题。

这个假设两个集合中存在相同的实例。

var sortedA = observableA.OrderBy(item=>observableB.Contains(item) ? 0 : 1);

如果它们不是相同的实例,而你想要比较像“名称”这样的属性,你也可以这样做。
var sortedA = observableA.OrderBy(item=>observableB.Any(item2 => item2.Name == item.Name) ? 0 : 1);

嗨,@Richard,我在LINQ方面没有太多经验。根据第一个条件,如果项目存在,则返回“0”,否则返回“1”。这个“0”和“1”是什么?它是真还是假之类的东西吗?能否稍微解释一下?提前感谢。 - nichu09
1
它按照1或0进行排序 - 如果它具有更高的优先级,则其排序顺序为0(将其放在顶部),如果它具有较低的优先级(不在第二个集合中),则其排序索引为1,并出现在具有0排序索引的元素之后。 :) - Richard Friend
那么我可以给出其他的值,比如2、3,而不是0、1吗?或者我们应该给0和1呢? - nichu09
你可以根据你想要的功能给它任何值,这个例子中你只是想根据它是否存在于另一个集合中进行排序,但你可以按照任何你想要的方式进行排序。 - Richard Friend

0
var a = "1,2,3,4,5,6,7,8,9,10,11,12,13".Split(',').ToList();
var b = "7,8,9,10,11".Split(',').ToList();

var c = a.OrderByDescending(x => b.IndexOf(x));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接