我正在使用WCF RIA编写Silverlight应用程序来获取大部分数据。我有AutoCompleteBoxes
的几个实例,我想要一个大的数据列表,但实际上只需要表中的几个字段。我真的想创建一个通用的UserControl,以便我可以设置我想要它当前使用的Type
。
AutoCompleteBox
有一个DomainDataSource
,因为我想要一种简单的方法来过滤它应该显示的数据(如果它显示的是联系人,那么我想要传递一个FilterDescriptor
来说明什么要显示的联系人类型)。我很确定DomainDataSource
需要一个Iqueryable返回才能运行..这就是我在服务器上尝试做的事情:
public IQueryable<CompactData> GetCompactData(string type)
{
switch (type)
{
case "Contact":
return this.ObjectContext.Contacts.Select(p => new CompactData() { GUID = p.GUID, Field1 = p.FirstName + " " + p.LastName });//.ToList();
case "Client_Clients":
return this.ObjectContext.Client_Clients.Select(p => new CompactData() { GUID = p.GUID, Field1 = p.ClientCode, Field2 = p.Name });//.ToList();
default:
throw new NotImplementedException();
}
}
我喜欢这个想法,因为AutoCompleteBox
可以绑定到Field1和Field2,我在这里设置了这意味着什么。更重要的是,使用FilterDescriptor
应用过滤器非常简单,而不必手动构建表达式树。不幸的是,我的客户端在返回Iqueryable时没有看到该方法(如果我将其更改为返回List然后它是可见的,但是我很确定我不能使用我的FilterDescriptors)。问题是我的CompactData
类型,为什么不是IQueryable类型?