我希望能够在客户端生成查询,然后将它们发送到服务器。为了保持安全,这是我的方法:
每个客户都与一个帐户相关联。因此,客户端必须向服务器发送帐户ID和查询。
然后,服务器将收到帐户ID和查询。然后,服务器将执行与该帐户相关的所有表和行的连接。
服务器将与该帐户相关的所有记录作为连接语句。然后它将执行客户端发送的查询,并将针对连接而不是整个数据库执行该查询。
所以我的问题是如何将linq查询发送到服务器?例如我希望客户端发送:
// Id of Account QUERY
object[]{ "AfKX-3451-X4hT-...", myContext.Customers.Where(x=>x.Age>18) }
第二个参数是IQueryable类型,因此我无法将其序列化:(
如果恶意用户反编译客户端应用程序并更改查询,那么他只会影响他的帐户,而不会影响整个数据库。
答案 0 :(得分:2)
我建议公开OData端点并使用Linq查询它 有关详细信息:http://msdn.microsoft.com/en-us/library/ee622463.aspx
答案 1 :(得分:1)
您可以通过表达式树序列化程序库序列化第二个参数,否则您可以在实体框架的源代码中找到序列化程序。使用用户ID和序列化查询调用web服务,并添加一些条件来查询,如query = query.Where(f => f.UserId == userId)并执行它。
您必须为所有搜索结果返回已知类型,例如数据表,数据行......您可以实现自己的类型。
此外,您可以使用第三方组件来执行此操作,例如telerik的过滤器控制。