因为我需要将以下MS SQL查询转换为C#中的Linq
正如我尝试过IQueryable而无法做到的。
因为我们需要检查条件是否为真,那么只需要与表
进行连接先谢谢。
SELECT @sqlQuery = 'SELECT distinct tbl_1.col1 , tbl_1.col2, tbl_1.col3
FROM tbl_1 vd '
if(@Condetion is not null)
BEGIN
set @sqlQuery = @sqlQuery +'
Inner Join
( SELECT vml.*
FROM tbl_2 vml
INNER JOIN tbl_3 vm
ON tbl_1.IDCol = tbl_2.IDCol WHERE tbl_3.Name LIKE ''%'+@Condetion+'%'') A ON A.MessageID = vd.MessageID '
END
set @sqlQuery = @sqlQuery + 'INNER JOIN tbl_4 tbl
ON tbl.ColID12 = vd.ColID12
LEFT OUTER JOIN
vdd_typeid tblVdd ON tblVdd.TypeId=tbl_1.TypeId
INNER JOIN ...... '
EXEC sp_executesql @sqlQuery
如下所示,我尝试使用LINQ
var query = from VD in _db.GetTable<tbl_1>() select VD ;
if (!string.IsNullOrEmpty(Category.Trim()))
{
query = query.Join((from VML in this._db.GetTable<tbl_1>()
join VM in this._db.GetTable<tbl_2>() on VML.MessageID equals VM.MessageID
where VM.Category.Name(Condetion),VD => new{VD.TypeId == [need write to write like this but can not VML.TypeId] }
}
query = query.Join(from TblVMS_def in this._db.GetTable<tbl_4>() on ........
答案 0 :(得分:1)
很难去除你真正需要的东西,我已经去了这里,但是你可以用你的实体图的副本和你所追求的数据的简洁描述来简化它。
我已经满足了我的想法
var cat = string.IsNullOrWhiteSpace(Category) ? null : Category.Trim();
var query = from VD in _db.GetTable<tbl_1>()
join tbl in _db.GetTable<tbl_4>() on tbl.ColID12 equals VD.ColID12
join VM_I in _db.GetTable<tbl_2>() on VD.MessageID equals VM_I.MessageID
from VM in VM_I.DefaultIfEmpty()
where cat == null || VM.Category.Name.Contains(cat)
select new { col1 = VD.col1, col2 = VD.col2, VD.col3 };
然后,您可以query.Distinct()
执行不同的值;
我是否可以建议您使用LinqPad来计算您的查询,它更容易使用,并且还会显示生成的SQL