2011-01-09 59 views
1

我们有两个相关的表(库存,inventoryLocalization)和T-SQL查询此基础上进行如下..转换的T-SQL查询的Linq与聚结以SQL和多个连接

select inv.[code], 
     coalesce(inL.name, inL2.name) as [name], 
     coalesce(inL.description, inL2.description) as [description] 
from dbo.[inventory] inv 
left join dbo.[inventoryLocalization] inL on inv.code = inL.code and inL.language = 'de' 
left join dbo.[inventoryLocalization] inL2 on inv.code = inL2.code and inL2.language = 'en' 
where inv.[code] like '15.' + '%' 
order by inv.[code]; 

性能我们将尝试从缓存中直接使用这些表,而不是直接从RDBMS中使用这些表。对于asp.net 4.0项目,由c#提供的 。 我们已经把这两个表都用一个DataSet来处理,我们可以通过这个DataSet来访问它们。

DataSet ds = UtilityCache.getCachedDataSet(); 

“ds.Tables [0]” 是库存表和 “ds.Tables [1]” 是inventoryLocalization

但我们如何可以转换上述T-SQL语法LINQ2SQL 。 是否可以使用合并选择语句并加入两个具有多个条件的表?

在此先感谢..

回答

2

聚结可以简单地用C#??合并操作,即做

select x.Name ?? y.Name; 

联接在LINQ单一的条件,但在大多数情况下(至少,对于内部连接),你可以添加一个额外的“其中”为相同的结果。这不幸的是,更难外连接:(

也请记住,当翻译变成次优或只是混乱,你可以使用:

var data = ctx.ExecuteQuery<ResultType>(tsql, args).ToList(); 

使用{0}等来表示参数(如string.Format符)并且其中ResultType可以是任何具有与返回的列名称匹配的属性名称的类型(为此目的,我经常使用特定于查询的本地类型)