这里将独立数据处理的查询相关常用操作,这里将会使用到Linq语句,希望大家对Linq有一定理解,关于LInq我会独立地用一个话题去讲述它的用法,这里我将假设你已经对Linq有一定了解。
排序:
1: //以id作为排序基准,并以升序方式排列,即:123456
2: GirdView1.ItemsSource = funSLContext.FunSLUsers.OrderBy(d => d.id);3: 4: //以id作为排序基准,并以降序方式排列,即:654321
5: GirdView1.ItemsSource = funSLContext.FunSLUsers.OrderByDescending(d => d.id);去除重复记录:
1: //去除重复的记录
2: GirdView1.ItemsSource = funSLContext.FunSLUsers.Distinct();单简查询:
1: //简单查询userId等于"jac"的资料
2: GirdView1.ItemsSource = from d in funSLContext.FunSLUsers
3: where d.userId == "jac"
4: select d;
自定义返回类形的查询:
1.定义一个类用以作为查询结果的自定义返回类型:
1: public class selectOut
2: {3: public string userName { get; set; }
4: public string Address { get; set; }
5: }2.自定义恩啊返类型的查询
1: //指定返回类型的查询,把userId等于"jac"的资料查询并以selectOut类型返回
2: //selectOut里的userName值源于查找结果的userId字段
3: //selectOut里的Address值源于查找结果的address字段
4: GirdView1.ItemsSource = from d in funSLContext.FunSLUsers
5: where d.userId == "jac"
6: select new selectOut() { userName = d.userId, Address = d.address };
欢迎您参与更多关于此话题的讨论,本文原创地址为:http://funsl.com admin博客
评论
你好,上面自定义返回类形的查询中,如果把查询结果修改了它会自动反应到funSLContext.FunSLUsers里去吗?如果不能那应怎么把修改后的数据保存呢?
会在c端缓存中,后你要使用subchange()方法去把修改更新到数据库那边.
请教楼主:
GirdView1.ItemsSource = from d in funSLContext.FunSLUsers
where d.userId == "jac"
select d;
这里的数据过滤是在客户端进行的吧?是不是数据已经全部Load到客户端了再用LINQ进行过滤?如果是这样的话,效率说不过去吧。。。
我看WCF RIA正式版中是类似这样来加载数据的:
funSLContext.Load(funSLContext.GetFunSLUsersQuery());
也就是LINQ查询是不是应该写到DomainService中去?非常感谢!
是这样的。如查在sl端用linq操作。那是操作sl端已加载的数据。如果加载后期间有添加或其他操作,sl端的实例数据一样会同步。其二就是你说的在docmainService里进行相关操作。这里有个好处就是操作的时候都直接在服务端进行。原理大概就是这样。希望你可以在不同的项目需求是使用得当即可。希望我的回答对你有所帮助。感谢你的支持。
admin大大,菜鸟又出问题了,得请教你个问题了,我的程序在vs开发环境中运行一切正常,当部署到IIS上时,RIA读取不到数据,运行页面报下面的错误:
消息: Unhandled Error in Silverlight 2 Application Load operation failed for query 'GetORG_DEPTs'. 远程服务器返回了错误: NotFound。
位于 System.Windows.Ria.OperationBase.Complete(Exception error)
位于 System.Windows.Ria.LoadOperation.Complete(Exception error)
位于 System.Windows.Ria.DomainContext.CompleteLoad(IAsyncResult asyncResult)
位于 System.Windows.Ria.DomainContext.<>c__DisplayClass17.b__13(Object )
我上网找了下相关的问题处理方案,说是WCF服务跨域访问问题,安相关方法做处理,处理方法如下:
1,添加跨域访问策略文件,放在网站的根目录下
clientaccesspolicy.xml配置:
<?xml version="1.0" encoding="utf-8"?>
crossdomain.xml配置:
<?xml version="1.0"?>
2、在IIS中,添加MIME类型
MIME 类型
.xaml application/xaml+xml
.xap application/x-silverlight-app
按上面方法在我的项目中处理后,还是报“远程服务器返回了错误: NotFound”错误,还有请admin大大出手帮忙看看,谢谢^_^
参考的两个地址:
http://www.cnblogs.com/seeker/archive/2009/01/22/1379732.html
http://www.cnblogs.com/amar-yao/archive/2009/05/20/1463835.html
很明显你的异常是从app.xaml.cs里抛出来的,所以未必是跨域的问题。这种异常是无办法确定的,只有你自己去做些测试把真正的bug找出来.
在VS开发环境中,运行一切正常,页面也不报错,但一部署到IIS环境中,就报上面的错误,不是很明白app.xaml.cs会抛出异常
本地确定不会出现问题的话,我看还是因为你iis7的权限没有配置好了。没什么其他原因了。建议装个非express版的sql 试试。
基本上可以确定是你的iis账户没有访问mdf文件 的权限。因为.net ria service不存在跨域问题,除非你自己改了。
admin,出差了一段时间,刚回来,现在这个问题有点头疼,首先我可以确定的是,我的开发环境windows2003 r2、vs2010,所以IIS是6.0的,数据用的是sql2008企业版,不是express版,也没有改IIS的相关账户的访问权限。
不知admin大大可否加小弟QQ,我QQ:895858735,谢谢!
对于你的情况我已经重新在我的电脑里重新做了个应用去测试,开始的确是不可以访问数据库,后来改用正式版的sql server后一切正常了。除此以外我没遇到其他情况了。关于.net ria services部署到iis的过程 。。
你好admin ,我是个silverlight初学者,在用RIA取数据用于treeview时,遇到个问题,具体代码如下: contact = this.deptContext.Load(this.deptContext.GetORG_DEPTsQuery()); deptList = (from dep in contact.Entities().ToList();
UserContactDSC deptContext = new UserContactDSC();
void AddTreeNode(string deptID, TreeViewItem treeViewItem)
{
LoadOperation
List
where dep.DEPT_ID==deptID
select dep).AsQueryable
if (deptList.Count > 0)
{
foreach (ORG_DEPT dept in deptList)
{
TreeViewItem treeNode = new TreeViewItem();
treeNode.Header = dept.NAME;
treeNode.DataContext = dept;
if (treeViewItem == null)
{
this.treeDept.Items.Add(treeNode);
}
else
{
treeViewItem.Items.Add(treeNode);
}
AddTreeNode(dept.DEPT_ID, treeNode);
}
}
}
上面这段代码是递归添加treeview节点,我的本意是遍历循环实体,把实体相关数据添加到节点上,但是这样取不到数据,deptList.Count = 0 ,不知如何可以取到数据?
internal void loadUserInfo(string userid)
{
DomainService1 ds = new DomainService1();
var da = ds.Load(ds.getUserInfoQuery(userid));
da.Completed += new EventHandler(da_Completed);
}
void da_Completed(object sender, EventArgs e) ut = (LoadOperation)sender;
{
LoadOperation
if (ut.Entities.Count() == 1)
{}
}
这样你应该看得明白的了,原因是这些操作都是异步的。不是马上就有结果的,所以要通过completed事件去确保数据读取操作完成后再操作数据.
实体数据读取成功,感谢admin 的帮忙,谢谢
我和你遇倒类似的问题,在网上问了好多的人,但都是答非所问。能否请你将你的代码发来让我学习一下,多谢!
我是个RIA service初学者,现在用这个开发程序进遇到了一个很郁闷的问题。
RIA service是用操作实体来与客户端交互的,可是如果是两个实体甚至多个实体的交互形成的集合数据该怎样查询出来并返回客户端的?新作一个实体类到是可以,但这样实体类是不是太多了点?总觉得这样不是很灵活......。
如果版主有什么好的建议能否不吝赐教,谢谢。
本人邮箱:qingyu20080808@126.com
你可以通过自定义方法的方式去返回一个指定的数据,包括数据的类型和集合。也就是说你可以定义一个方法返回一个结果给sl。
http://funsl.com/content/net-ria-services-%E8%87%AA%E5%AE%9A%E4%B9%89%E5...
以上就是说如何自定议方法给sl的.
你回复的链接文章我看过了,非常感谢!在问一下.这个是不是每次返回客户端数据时是不是都要自定义一个类啊?比如你给出的例子中的那个自定义类.因为我做的是一个比较复杂的程序,有很多的关联表查询操作.像统计之类的功能.....
如果表比较复杂你可以使用soa的概念去设计你的程序,你把功能封装成一个自定义方法。这个方法回返你这个功能所需的自定义数据。复杂的数据操作留在asp.net里。也就是那个domain Service class里。这里完全是ado.net EF。所以操作数据功能相当强劲。