Linq to Sql - 手动关联手动参数

时间:2015-08-17 14:42:18

标签: c# sql linq linq-to-sql

我的数据库中有以下表格:

SageAccount

  • ID(bigint)
  • LegacyID(nvarchar)
  • 客户(位)

托运

  • ID(bigint)
  • 客户(nvarchar)

我想要做的是在我的Linq to Sql dbml中从ConsignmentSageAccount有一个导航属性/关联。这样做的难点在于我们不仅需要匹配SageAccount.LegacyID => Consignments.Customer,而且我们还需要加入SageAccount.Customer为TRUE的sage帐户。所以在Consignments结束时,它不是连接到一个字段而是一个静态值。

这在Linq to Sql中是否可行?请注意,此数据库没有(并且遗憾的是)无法在数据库中设置任何外键。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。 linq有join方法。你可以在你的情况下使用它:

var res = from sageAccount in _context.SageAccount
            join consignments in _context.Consignments
            on
            new
            {
                LegacyID = sageAccount.LegacyID,
                Customer = sageAccount.Customer
            }
            equals
            new
            {
                LegacyID = consignments.ID,
                Customer = true
            }
            select new { SageAccountID = sageAccount.ID };

请注意,您加入的匿名对象中的媒体资源名称,类型和顺序必须匹配。

您不能在联接中使用ORAND - 只使用equals一个对象与其他对象。

这将在您的SQL中产生这样的结果:

SELECT [t0].[ID] AS [SageAccountID]
FROM [dbo].[SageAccount] AS [t0]
INNER JOIN [dbo].[Consignments] AS [t1] ON (([t0].[LegacyID]) = [t1].[ID]) 
                                        AND ([t0].[Customer] = 1)