这是我的情景 我得到了
表1
表2
在Table1之间设置一对多关系。 id和Table2.fid
现在这是我的WCF服务代码
[OperationContract]
public List<Table1> GetCustomers(string numberToFetch)
{
using (DataClassesDataContext context = new DataClassesDataContext())
{
return context.Table1s.Take(int.Parse(numberToFetch)).ToList( );
}
}
和我的ASPX页面代码
<body xmlns:sys="javascript:Sys"
xmlns:dataview="javascript:Sys.UI.DataView">
<div id="CustomerView"
class="sys-template"
sys:attach="dataview"
dataview:autofetch="true"
dataview:dataprovider="Service2.svc"
dataview:fetchParameters="{{ {numberToFetch: 2} }}"
dataview:fetchoperation="GetCustomers">
<ul>
<li>{{family}}</li>
</ul>
</div>
虽然我在Linq2Sql设计器中将序列化模式设置为Unidirectional但我无法获得系列值,所有我得到的就是这个在firebug中
{"d":[{"__type":"Table1:#","id":1,"name":"asd"},{"__type":"Table1:#","id":2,"name":"wewe"}]}
任何帮助都将完全受到赞赏
答案 0 :(得分:1)
嗯,重点是:您的方法GetCustomers
只能从Table1
中选择 - 我根本没有看到Table2
的任何引用,其中Family
列位于......
您需要检查Linq-to-SQL JOIN以及如何将连接表中的数据提取到结果集中。
有些事情:
[DataContract]
class JoinedResult
{
[DataMember]
public int Table1ID { get; set; }
[DataMember]
public string Table1Name { get; set; }
[DataMember]
public string Table2Family { get; set; }
}
[OperationContract]
public List<JoinedResult> GetCustomers(int numberToFetch)
{
using (DataClassesDataContext context = new DataClassesDataContext())
{
var q = from t1 in context.Table1
join t2 in context.Table2 on t1.id = t2.fid
select new JoinedResult
{ Table1ID = t1.ID,
Table1Name = t1.Name,
Table2Family = t2.Family };
return q.Take(numberToFetch).ToList();
}
}
和btw:你应该让numberToFetch
成为一个INT参数!让来电者进行转换......
更新:如果您不想明确包含要查询的第二个表,则可以在您的上下文中添加DataLoadOption
:
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Table1>(t => t.Table2);
context.LoadOptions = dlo;
在这种情况下,当你从Table2
加载任何内容时,你告诉LINQ始终包含Table1
中的所有元素 - 这也应该有用。