C# 动态SQL到LINQ实体框架

C# 动态SQL到LINQ实体框架,c#,entity-framework,linq,plsql,data-conversion,C#,Entity Framework,Linq,Plsql,Data Conversion,我只有LINQ的基本知识。我讲SQL和JDBC,负责将动态PL/SQL转换为LINQ实体框架。如何将条件WHERE子句添加到LINQ查询中?下面是一个非常简化的示例(不包括类型信息): 为了弄清楚C#/LINQ语法,下面是我的尝试(自下而上): 我不知道 1) 如果我将Q1正确地引入到Q2中 2) 如何引入动态WHERE子句 要以等效游标语句结束,请执行以下操作: OPEN curs FOR Q1 || Q2 || condAddOn ')b'; 添加:我可以使用函数或表达式来包含动态位吗?我

我只有LINQ的基本知识。我讲SQL和JDBC,负责将动态PL/SQL转换为LINQ实体框架。如何将条件WHERE子句添加到LINQ查询中?下面是一个非常简化的示例(不包括类型信息):

为了弄清楚C#/LINQ语法,下面是我的尝试(自下而上):

我不知道 1) 如果我将Q1正确地引入到Q2中 2) 如何引入动态WHERE子句 要以等效游标语句结束,请执行以下操作:

OPEN curs FOR Q1 || Q2 || condAddOn ')b';
添加:我可以使用函数或表达式来包含动态位吗?我看到了对Expression和Expandable()的引用,但不确定。
添加:当使用带有链接的
where
方法时,我在LINQ查询中的尝试将返回一个
IQueryable
对象。这不会立即执行语句,因此可以执行以下操作:

var results = from person in folks
              join addr in addresses
              where person.addrId == addr.addrId
              select new { 
                  person.birthday, 
                  addr.address
                  };
 if(predicate){
    results = from r in results
               where /* new condition here */
               select r;
 }
 var resultSet = results.ToList().AsEnumerable();
对于其他链接操作符,尤其是在使用lambda linq时,您还可以asqueryly使用
扩展方法

例如,但不限于:

var results = folks.join(address, 
                 person => person.addrId,
                 addr => addr.addrId
                 (person, addr) => new {
                                          person.birthday,
                                          addr.address
                                       }).AsQueryable();
if(predicate)
{ 
   results = results.where(/*predicate for the where condition*/);
}
var resultSet = results.ToList().AsEnumerable();

谢谢你的解释。我想这会让我开始:-)
var results = from person in folks
              join addr in addresses
              where person.addrId == addr.addrId
              select new { 
                  person.birthday, 
                  addr.address
                  };
 if(predicate){
    results = from r in results
               where /* new condition here */
               select r;
 }
 var resultSet = results.ToList().AsEnumerable();
var results = folks.join(address, 
                 person => person.addrId,
                 addr => addr.addrId
                 (person, addr) => new {
                                          person.birthday,
                                          addr.address
                                       }).AsQueryable();
if(predicate)
{ 
   results = results.where(/*predicate for the where condition*/);
}
var resultSet = results.ToList().AsEnumerable();