使用Linq具有多个联接的动态Where子句

使用Linq具有多个联接的动态Where子句,linq,join,conditional,where-clause,Linq,Join,Conditional,Where Clause,我需要在具有多个联接的Linq语句中构建一个动态where子句 .Net 3.5 Linq到Sql 我有这些Linq语句的传入参数,只需要UID int uid = 23702; // <-- Only one Required string courseNumber = ""; string title = ""; int? categoryId = null; int? typeId = null; 我尝试使用PredicateBuilder,但它返回错误: 无法从用法推断方法“S

我需要在具有多个联接的Linq语句中构建一个动态where子句

.Net 3.5 Linq到Sql 我有这些Linq语句的传入参数,只需要UID

int uid = 23702;  // <-- Only one Required
string courseNumber = "";
string title = "";
int? categoryId = null;
int? typeId = null;
我尝试使用PredicateBuilder,但它返回错误:

无法从用法推断方法“System.Linq.Queryable.WhereSystem.Linq.IQueryable,System.Linq.Expressions.Expression>”的类型参数。尝试显式指定类型参数

以下是我的PredicateBuilder Linq尝试:

var conditions = PredicateBuilder.True<user_course>();
conditions = conditions.And(c => c.uid == uid);

var ci = course_instances;

var query = courses.Join(ci, 
    c => c.course_id, 
    i => i.course_id, 
    (c, i) => new
{
    c = c,
    i = i
}).Join(user_courses, 
    temp => temp.i.instance_id, 
    uc => uc.instance_id, 
    (temp, uc) => new
{
    temp = temp,
    uc = uc
})
.Where (conditions)

.Select (temp1 => new CourseSearchMyCourses
{
    // snipped the many properties
});
顺便说一句,我还尝试使用字符串查询使用System.Linq.Dynamic,但出现了错误,无法识别

感谢您的帮助


谢谢。

带有可为NULL类型变量的Linq谓词将被转换为SQL谓词=NULL。但这与它应该是的完全不同:它是空的

您希望得到course\u type\u id为空的行,但是=比较不返回任何结果,因为NULL不是值,并且比较返回未知。我认为这就是你不正确结果的原因

如果这是您的问题,可以找到解决方案

var conditions = PredicateBuilder.True<user_course>();
conditions = conditions.And(c => c.uid == uid);

var ci = course_instances;

var query = courses.Join(ci, 
    c => c.course_id, 
    i => i.course_id, 
    (c, i) => new
{
    c = c,
    i = i
}).Join(user_courses, 
    temp => temp.i.instance_id, 
    uc => uc.instance_id, 
    (temp, uc) => new
{
    temp = temp,
    uc = uc
})
.Where (conditions)

.Select (temp1 => new CourseSearchMyCourses
{
    // snipped the many properties
});