Javascript JayData一对多预测

Javascript JayData一对多预测,javascript,jaydata,Javascript,Jaydata,我想使用jaydatajslq(JavaScript语言查询)将一对多PostData的PostData列表展平到我的ViewModel中 我的EF实体如下所示: public partial class Post { public Post() { this.PostData = new HashSet<PostData>(); } public int Id { get;

我想使用jaydatajslq(JavaScript语言查询)将一对多
PostData
PostData
列表展平到我的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; }
}
{id:1, title:'foo'}
我希望客户端中的视图模型如下所示:

public partial class Post
{       
    public Post()
    {           
        this.PostData = new HashSet<PostData>();           
    }

    public int Id { get; set; }

    public virtual ICollection<PostData> PostData { get; set; }
}
{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( ... )

嗨,Stefan,你能粘贴你的JayData实体的定义吗?谢谢你的回答。很高兴知道这还不起作用。您的解决方案是一种变通方法,在某些情况下可能会奏效,但当涉及到将帖子列表反规范化为一个简单的视图模型列表(post.title而不是post.postdata[0].FieldValue)时,它会变得有点难处理。我不太明白您的意思。对我来说,问题实际上源于Post及其内容PostData的制定方式。也就是说,实体被序列化存储在名称/值列表中。我知道为什么这种方法似乎是不可避免的(我有一些cms背景),但根据我的经验,它总是回击。您将失去使用索引和类型元数据信息的能力。存储动态类型的信息sql可能不是最好的方法。我的意思是:实际上,您需要的是一个存储,它允许您在运行时定义实体,然后,它允许您在不丢失数据的情况下动态扩展这些实体。我看对了吗?我的假设是添加一个新的字段(类型)是很少的,如果以后修改C代码的话。我确实看到了切换到NoSQL的方法的点(“不仅”或“不,根本不”)-我们将考虑这个选项,我们需要进行调查,因为关系数据库确实有一些优势。对我来说,找到问题的第一个解决方案非常重要,这样我们就可以向客户机(javascript)交付数据,稍后我们将重构服务器端。谢谢你的评论!我们遇到了同样的情况:我们需要一些动态的东西,以便能够动态地接受新的实体类型(甚至不需要重新启动/etc)。我们还希望能够提供每个人都真正需要的关系特性:比如groups by、sums等。我们认为我们刚刚在MongoDB中发现了这一点,JayData提供商正在着手实现这一点。