我想使用 jaydata JSLQ(JavaScript Language Query)将具有一对多PostData
的Post
列表展平到我的 ViewModel 中
我的 EF 实体如下所示:
public partial class Post
{
public Post()
{
this.PostData = new HashSet<PostData>();
}
public int Id { get; set; }
public virtual ICollection<PostData> PostData { get; set; }
}
我的数据库包含以下记录:
Table: Post
Id;...
1;...
Table: PostData
Id;PostId;FieldType; FieldValue
1; 1; 10; "foo"
2; 1; 12; "bar"
3; 1; 34; "blah"
我希望客户端中的视图模型如下所示:
{id:1, title:'foo'}
这意味着,我想在PostData上放置一个仅返回FieldName==10的过滤器,并且我想将其扁平化为一个简单的对象。
我该怎么做?
context.Posts.toArray(function(posts){console.dir(posts);})
返回一个 POST 对象的数组。接下来呢?
这是通过 EF 中的 SelectMany() 函数实现的,JayData 尚不支持这种方法。但是,您可以通过直接查询 aganst PostData 并筛选 Post 属性来实现相同的输出。
context.PostDatas
.filter( function(pd) { return pd.FieldType == 10 } )
.map( function(pd) { return {
PostID: pd.Post.Id,
PostDataId: pd.Id,
Title: pd.FieldValue }})
.toArray( ... )