C# Silverlight的XML和数据库过滤:动态LINQ?有更好的办法吗?
我有一个Silverlight应用程序,允许用户在几个不同的持久化数据集上指定过滤器。持久化数据可以是XML或关系数据库表。我在数据库层使用nHibernate,因为我需要至少支持不同的数据库选项,Postgresql和MySQL。过滤器字段根据要查询的数据集而有所不同 目前,过滤器作为字符串从Silverlight客户端传递到服务器,我利用服务器上的类将其转换为LINQ查询。对于所有数据都已加载到内存中的XML情况,这很好,但我不确定这是否是数据库的最佳方法 我的问题是,从客户端以字符串形式发送过滤器,然后使用动态LINQ库进行解析是否是最好的方法?我能使用nHibernate生成的LINQ查询吗?或者,我应该考虑在Silverlight中序列化一个表达式对象并将其传递给服务器吗?还是有别的办法 我需要我的persited对象为访问提供一个标准接口,并且有一些这样的对象,所以不能为每个需要的过滤器提供不同的方法接口 下面是我的持久性类支持的接口的一个例子,我正在努力解决的是Where表达式C# Silverlight的XML和数据库过滤:动态LINQ?有更好的办法吗?,c#,linq,silverlight,C#,Linq,Silverlight,我有一个Silverlight应用程序,允许用户在几个不同的持久化数据集上指定过滤器。持久化数据可以是XML或关系数据库表。我在数据库层使用nHibernate,因为我需要至少支持不同的数据库选项,Postgresql和MySQL。过滤器字段根据要查询的数据集而有所不同 目前,过滤器作为字符串从Silverlight客户端传递到服务器,我利用服务器上的类将其转换为LINQ查询。对于所有数据都已加载到内存中的XML情况,这很好,但我不确定这是否是数据库的最佳方法 我的问题是,从客户端以字符串形式发
public interface ICustomerPersistor
{
Customer Add(Customer customer);
Customer Update(Customer customer);
Customer Delete(Customer customer);
Customer Get(Guid customerId);
int Count(string whereExpression);
Customer Get(string username, string password);
List<Customer> Get(string whereExpression, int offset, int count);
}
公共接口ICustomerPersistor
{
客户添加(客户);
客户更新(客户);
客户删除(客户);
客户获取(Guid customerId);
整数计数(字符串表达式);
客户获取(字符串用户名、字符串密码);
列表获取(字符串表达式、整数偏移量、整数计数);
}
您考虑过ADO.NET数据服务吗?这允许您通过RESTAPI(由WCF支持)执行LINQ查询-但是该工具完成了所有繁重的工作
许多(不是全部)标准LINQ滤波器(etc)都受支持,并且可以组合
特别是,对于查询数据,ADO.NET数据服务应该很好—对于更新数据,您需要做更多的工作(或者使用单独的非REST API进行更新)。我有一系列关于LINQ到SQL的介绍(其他LINQ提供程序的工作应该类似)。您考虑过ADO.NET数据服务吗?这允许您通过RESTAPI(由WCF支持)执行LINQ查询-但是该工具完成了所有繁重的工作 许多(不是全部)标准LINQ滤波器(etc)都受支持,并且可以组合
特别是,对于查询数据,ADO.NET数据服务应该很好—对于更新数据,您需要做更多的工作(或者使用单独的非REST API进行更新)。我有一系列关于LINQ到SQL的内容(工作应该与其他LINQ提供程序类似)。更新还可以,这确实是我一直坚持的问题。我快速浏览了你的博客,只问了一个问题。您正在使用ADO.Net数据服务通过REST传输查询,但在服务器端,您可以再次完全访问查询,以执行您希望的操作?在我的例子中,将其与diff LINQ Provider一起使用据我所知,ADO.NET Data Services公开了您选择公开的IQueryable属性,因此您公开了IQueryable,其余的都由它来完成。但除非您编写自己的提供者,否则您将无法完全控制。它将为您应用“Where”、“OrderBy”、“Skip”、“Take”等。更新是可以的,这确实是我一直坚持的问题。我快速浏览了你的博客,只问了一个问题。您正在使用ADO.Net数据服务通过REST传输查询,但在服务器端,您可以再次完全访问查询,以执行您希望的操作?在我的例子中,将其与diff LINQ Provider一起使用据我所知,ADO.NET Data Services公开了您选择公开的IQueryable属性,因此您公开了IQueryable,其余的都由它来完成。但除非您编写自己的提供者,否则您将无法完全控制。它将为您应用“Where”、“OrderBy”、“Skip”、“Take”等。