Linq to sql LinqToSql左外连接多条件

Linq to sql LinqToSql左外连接多条件,linq-to-sql,Linq To Sql,在某些或许多方面,linqtosql使得很难重新创建一个非常简单的sql。我尝试过谷歌搜索,但找不到任何关于如何将下面的代码转换为linqtosql的答案,该代码带有一个左外部联接,该联接具有一个条件,该条件应将列值求值为true。提前感谢任何能在c语言中提供帮助的人 选择* 从…起 StockType.StockTypeID=StoreProduct.StockTypeID上的StockType内部联接StoreProduct Yield.ToStockTypeID=StockType.Sto

在某些或许多方面,linqtosql使得很难重新创建一个非常简单的sql。我尝试过谷歌搜索,但找不到任何关于如何将下面的代码转换为linqtosql的答案,该代码带有一个左外部联接,该联接具有一个条件,该条件应将列值求值为true。提前感谢任何能在c语言中提供帮助的人

选择* 从…起 StockType.StockTypeID=StoreProduct.StockTypeID上的StockType内部联接StoreProduct

Yield.ToStockTypeID=StockType.StockTypeID和StockType.IsWholeFormForSpecies=1上的左外部联接收益率


YieldGrade.YieldID=Yield.YieldID和YieldGrade.SizeGradeCode='B'上的左外联接YieldGrade使用多个条件但不是完整查询的左外联接示例:

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是一个可为null的int,在这种情况下,您应该能够替换为:new{StockTypeID=y.ToStockTypeID.Value,…IsWholeFormFormForSpecies=true解决了问题。非常感谢Ben的大力帮助。希望我知道如何增加您的声誉。很高兴这有所帮助。如果您未注册,我不确定它是如何工作的,但您是否能够投票/将答案标记为已接受?