【问题标题】:LinqToSql Left Outer Join Multi-ConditionsLinqToSql 左外连接多条件
【发布时间】:2010-11-11 14:34:59
【问题描述】:

在某些(或许多)方面,linqtosql 很难重新创建一个非常简单的 sql。我试过谷歌搜索,但找不到任何关于如何将下面的代码转换为 linqtosql 的答案,左外连接有一个条件,应该将列值评估为真。提前感谢任何可以提供帮助的人(最好使用 c#)。

选择 * 来自
StockType INNER JOIN StoreProduct ON StockType.StockTypeID = StoreProduct.StockTypeID

LEFT OUTER JOIN Yield ON Yield.ToStockTypeID = StockType.StockTypeID AND St​​ockType.IsWholeFormForSpecies = 1

LEFT OUTER JOIN YieldGrade ON YieldGrade.YieldID = Yield.YieldID AND YieldGrade.SizeGradeCode = 'B'

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

    一个使用多个条件的左外连接示例,但不是完整的查询:

    var query = from s in db.StockType 
        join y in db.Yield on 
            new { s.StockTypeID, s.IsWholeFormForSpecies } 
            equals 
            new { StockTypeID = y.ToStockTypeID, IsWholeFormForSpecies = 1 } 
            into y1
        from y2 in y1.DefaultIfEmpty()
        select new 
        {
            StockType = s,
            Yield = y2
        };
    

    【讨论】:

    • 感谢 Ben,但我在 VS2008 上面的 linqtosql 上收到此错误:“join 子句中的表达式类型不正确。调用 'Join' 时类型推断失败”。你知道为什么吗?
    • 嗨,莱昂。匿名类型 (new { ... }) 的定义必须完全匹配。因此 StockType.StockTypeID 和 Yield.ToStockTypeID 必须是同一类型(我假设为 int),并且 StockType.IsWholeFormForSpecies 需要是一个 int 以匹配常量“1”。我猜这个错误是因为 Yield.ToStockTypeID 是一个可为空的 int,在这种情况下你应该能够替换: new { StockTypeID = y.ToStockTypeID.Value, ...
    • IsWholeFormForSpecies = true 解决了这个问题。非常感谢 Ben 的大力帮助。希望我知道如何增加您的声誉。
    • 很高兴有帮助。如果您未注册,我不确定它是如何工作的,但您能否投票/将答案标记为已接受?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多