【问题标题】:Linq To Entity - Filter Relational Data ProblemLinq To Entity - 过滤关系数据问题
【发布时间】:2011-09-13 00:16:03
【问题描述】:

我有 2 张桌子。 表 1 和表 2。它们具有一对多的关系。我正在尝试进行如下查询。它可以很好地找到结果。我的意思是,如果根据参数找不到任何结果,我会像往常一样得到空值。但是,它始终在表 1 类中带来所有表 2 结果,我确实希望根据查询仅获得表 2 结果。

dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1 
                           && t1.Table2s.Any(t2 => t2.SearchField2 == param2 
                                          && t2.SearchField3 == param3));

我确实希望结果为 Table1 类并使用 Table1.Table2s 过滤。可以吗???

【问题讨论】:

    标签: c# linq entity-framework linq-to-entities entity-framework-4.1


    【解决方案1】:

    您需要定义您希望如何使用两个表之间的关系。

    例如,如果表 2 引用了表 1,而表 1 具有表 2 的集合:

    var result = (from t1 in Table1s
                 from t2 in t1.Table2s // this leverages the relationship
                 where t1.sf1 == p1 
                       && t2.sf2 = p2
                       && t2.sf3 == p3
                 select t1).FirstOrDefault();
    

    以上将使用您的关系加入两者,并为您提供符合条件的所有 t1。

    【讨论】:

    • 感谢您的回答。但它仍然没有过滤 t1.Table2s 结果。我忘了说我正在使用 LazyLoading。可能是这个原因吗?
    • 可能 - 单步执行代码并在调用 linq 查询之前检查 t1.Table2s 是否有任何结果。
    • 我的查询没有问题。如果 3 个标准不匹配,我根本没有结果。所以我很确定查询是有效的。当我从查询中取回 Table1 并检查 Table1.Table2s 时,我看到 2 条记录不是一条的唯一原因。在 LinqToSQL 中我没有这样的问题。但我想原因是 LazyLoading。返回结果时它会覆盖查询...
    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多