Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询中IQueryable连接中的if条件(将SQL转换为LINQ)_C#_Linq_Linq To Sql_Linq To Entities_Sql To Linq Conversion - Fatal编程技术网

C# LINQ查询中IQueryable连接中的if条件(将SQL转换为LINQ)

C# LINQ查询中IQueryable连接中的if条件(将SQL转换为LINQ),c#,linq,linq-to-sql,linq-to-entities,sql-to-linq-conversion,C#,Linq,Linq To Sql,Linq To Entities,Sql To Linq Conversion,因为我需要将中的以下MS SQL查询转换为C中的Linq 正如我尝试过的那样,我可以但不能做到 因为我们需要检查条件是否为真,所以只需要转到join with table 谢谢你 SELECT @sqlQuery = 'SELECT distinct tbl_1.col1 , tbl_1.col2, tbl_1.col3 FROM tbl_1 vd ' if(@Condetion is not null) BEGIN set @s

因为我需要将中的以下MS SQL查询转换为C中的Linq

正如我尝试过的那样,我可以但不能做到

因为我们需要检查条件是否为真,所以只需要转到join with table

谢谢你

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 ........

很难确定您实际需要什么,我已经尝试过了,但是如果您有一份实体图的副本和对所需数据的简明描述,可能会简单得多

我已经试过你想要的了

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


我可以建议您使用它来计算您的查询吗?它更易于使用,并且还将向您显示结果SQL

如果您可以向我们提供Linq实体,你有关联设置吗?你真的在使用实体框架或linq 2 sql吗?而且你的子查询非常混乱,不清楚你是否有3个表共享的相同键,或者三个表中的一个有2个键,而两个表只有一个ETC。如果你发布这样的代码,请不要指望我们会帮助你。我们很乐意帮助您,但您的代码非常神秘,我们需要花费大量时间来破译它,然后才能得出答案。请不要发布这样糟糕的代码来不尊重我们。做你的家庭作业:清理代码,向我们展示你的尝试,你的数据模型是什么样子的,并提出一个好问题。