Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 如何创建';直播';收集';2个(或更多)其他系列中的concat/union/是什么?_Silverlight_Linq_Silverlight 4.0_Wcf Ria Services - Fatal编程技术网

Silverlight 如何创建';直播';收集';2个(或更多)其他系列中的concat/union/是什么?

Silverlight 如何创建';直播';收集';2个(或更多)其他系列中的concat/union/是什么?,silverlight,linq,silverlight-4.0,wcf-ria-services,Silverlight,Linq,Silverlight 4.0,Wcf Ria Services,注意:我当然可以通过更改实现INotifyCollectionChanged的类来强制实现这一点,但感觉好像已经解决了一些问题,我只是还没有找到正确的位置 在我的viewmodel中的一些地方,我有一些集合,它们实际上是我的域上下文(我们称之为SomeEntitySet)中的某个特定实体集,其中添加了一些“特殊”实例(在前面,在后面,有时两者都有)。目前,我将其实现为一个简单的ObservableCollection(我们将其称为SupplementedEntitySet),并且每当我更新特定的

注意:我当然可以通过更改实现INotifyCollectionChanged的类来强制实现这一点,但感觉好像已经解决了一些问题,我只是还没有找到正确的位置

在我的viewmodel中的一些地方,我有一些集合,它们实际上是我的域上下文(我们称之为SomeEntitySet)中的某个特定实体集,其中添加了一些“特殊”实例(在前面,在后面,有时两者都有)。目前,我将其实现为一个简单的ObservableCollection(我们将其称为SupplementedEntitySet),并且每当我更新特定的实体集时,回调也会重新填充这个SupplementedEntitySet。域上下文的实体集是只读的,因此我不能在那里添加“特殊”实例(而且我真的不想这样做,因为我不想将它们写回数据库)

对于这种情况,假设1)我不想修改RIA查询以包括这些“特殊”实体2)我不想在使用站点包括绑定转换器以添加它们,等等

虽然您可能不会使用这个特定的机制来实现这一点,但作为一个示例场景,假设您有一个从RIA调用返回的类别列表,但是您希望组合框绑定到的集合也有一个特殊的“All items”类别(同样,不希望通过converter等添加它)

在概念层面上,我通常会考虑Rx之类的东西,但至少在目前,我不知道如何使用它,这样我仍然会有一个“拉”集合,用于绑定作为某些ItemsControl(网格、combobox、listbox等)的ItemsSource

当然,这是一个更一般的问题的具体案例—如何获得“实时”linq查询输出—您可能需要“实时”集合,这些集合是源的子集、投影、或某些组合,或其他。就像我们有用于IEnumerable、IQueryable和IObservable的LINQ提供程序一样,感觉我们可以/应该有一个类似IObservableCollection的提供程序(其中IObservableCollection:ICollection、INotifyCollectionChanged或类似的内容)

更通用的框架/提供者/任何东西看起来都非常复杂(特别是以性能的方式实现),所以至少目前,我只是在寻找源集合的特定场景(在本例中,是一个可观察集合,尽管DomainContext只将它们公开为IEnumerable)


我想得不对吗?

您在问题中提到了Rx,但您不确定如何以“拉”集合结束绑定。这很容易。你只需要“推”你的“拉”收藏

从以下主题开始:

var updatedItems = new Subject<IEnumerable<string>>();
var itemsObservableList = new ObservableCollection<string>();

var extras = new [] { "<all items>" };

var supplementedItems = 
    from items in updatedItems
    select extras.Concat(items);

supplementedItems.Subscribe(items =>
{
    itemsObservableList.Clear();
    items.Run(itemsObservableList.Add);
});
现在,您可以像下面这样更新您的
ObservableCollection

var updatedItems = new Subject<IEnumerable<string>>();
var itemsObservableList = new ObservableCollection<string>();

var extras = new [] { "<all items>" };

var supplementedItems = 
    from items in updatedItems
    select extras.Concat(items);

supplementedItems.Subscribe(items =>
{
    itemsObservableList.Clear();
    items.Run(itemsObservableList.Add);
});
var itemsObservableList=newobservableCollection();
var extras=new[]{”“};
var补充数据=
来自updatedItems中的项
选择附加混凝土(项目);
Subscribe(项目=>
{
itemsObservableList.Clear();
运行(itemsObservableList.Add);
});

这样,您只需更新主题一次,所有关联的视图模型就会自动更新。:-)

您在问题中提到了Rx,但您不确定如何最终得到一个用于绑定的“拉”集合。这很容易。你只需要“推”你的“拉”收藏

从以下主题开始:

var updatedItems = new Subject<IEnumerable<string>>();
var itemsObservableList = new ObservableCollection<string>();

var extras = new [] { "<all items>" };

var supplementedItems = 
    from items in updatedItems
    select extras.Concat(items);

supplementedItems.Subscribe(items =>
{
    itemsObservableList.Clear();
    items.Run(itemsObservableList.Add);
});
现在,您可以像下面这样更新您的
ObservableCollection

var updatedItems = new Subject<IEnumerable<string>>();
var itemsObservableList = new ObservableCollection<string>();

var extras = new [] { "<all items>" };

var supplementedItems = 
    from items in updatedItems
    select extras.Concat(items);

supplementedItems.Subscribe(items =>
{
    itemsObservableList.Clear();
    items.Run(itemsObservableList.Add);
});
var itemsObservableList=newobservableCollection();
var extras=new[]{”“};
var补充数据=
来自updatedItems中的项
选择附加混凝土(项目);
Subscribe(项目=>
{
itemsObservableList.Clear();
运行(itemsObservableList.Add);
});

这样,您只需更新主题一次,所有关联的视图模型就会自动更新。:-)

有一个项目continuous Linq:,但它不支持Union,只支持Concat和Except。您还可以查看可绑定Linq。我不知道他们是否能在这种特殊情况下提供帮助。有一个项目Continuous Linq:,但它不支持Union,只支持Concat和Exception。您还可以查看可绑定Linq。我不知道他们在这种特殊情况下是否能帮上忙。