Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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查询上使用lambda表达式_C#_Mysql_Linq_Lambda - Fatal编程技术网

C# 在联接的基本LINQ查询上使用lambda表达式

C# 在联接的基本LINQ查询上使用lambda表达式,c#,mysql,linq,lambda,C#,Mysql,Linq,Lambda,在进行基本LINQ查询时,您可以稍后使用lambda表达式添加一个where子句,如下所示:query.where(c=>(init.Contains(c.user)) 我的问题是,我需要在基本LINQ查询中使用join的查询上添加两个where子句 我试图用添加的lambda表达式替换旧的基本LINQ查询,以防止代码重复 这是我的密码 var query = from c in db.Clgcom join u in db.Dvusr on c.

在进行基本LINQ查询时,您可以稍后使用lambda表达式添加一个where子句,如下所示:
query.where(c=>(init.Contains(c.user))

我的问题是,我需要在基本LINQ查询中使用
join
的查询上添加两个where子句

我试图用添加的lambda表达式替换旧的基本LINQ查询,以防止代码重复

这是我的密码

var query = from c in db.Clgcom
            join u in db.Dvusr
            on c.Comaut equals u.Gitusr
            // && (initialen.Contains(c.Tstusr) // <-- query.Where(c => (initialen.Contains(c.Tstusr)));
            // This is what im trying to replace// ^^ This works because its in the same table
            // || initialen.Contains(u.Clgusr)) // <-- What do i type when i want to include both these conditions?
            && (c.Modid.StartsWith("C")
            || c.Modid.StartsWith("M"))
            select c;

if(filter != null){
    query = query.Where(c => (initialen.Contains(c.Tstusr) 
                             || initialen.Contains(u.Clgusr)));
                             // This doesn't work
}
var query=来自db.Clgcom中的c
加入db.Dvusr
关于c.Comaut等于u.Gitusr
//&&(initialen.Contains(c.Tstusr)/(initialen.Contains(c.Tstusr)));
//这就是我试图替换的//^^^这是有效的,因为它在同一个表中
//| | initialen.Contains(u.Clgusr))/(initialen.Contains(c.Tstusr)
||首字母包含(u.Clgusr));
//这不管用
}
有没有一种方法可以使用lambda表达式来实现在where子句中添加这两个条件


或者我应该使用lambda表达式替换所有基本LINQ查询吗?

基本上,您还需要推迟
select
,首先选择
c
u
,然后只选择
c

var temp = from c in db.Clgcom
           join u in db.Dvusr on c.Comaut equals u.Gitusr
           where c.Modid.StartsWith("C") || c.Modid.StartsWith("M")
           select new {c, u};

if(filter != null){
    temp = temp.Where(x => initialen.Contains(x.c.Tstusr) 
                           || initialen.Contains(x.u.Clgusr));

var query = temp.Select(x => x.c);
如果
Clgcom
Dvusr
之间的关系是多对一的,那么您可以执行以下操作,因为
Clgcom
应该具有基于外键关系的
Dvusr
导航属性

var query = from c in db.Clgcom
            where (c.Modid.StartsWith("C") || c.Modid.StartsWith("M")) && c.Dvuser != null
            select c;

if(filter != null){
    query = query.Where(c => initialen.Contains(c.Tstusr) 
                             || initialen.Contains(c.Dvusr.Clgusr));

唯一应该在连接的on中的部分是
c.Comaut等于u.Gitusr
。剩下的应该放在一个地方。另外,如果
c.Comaut
u.Gitusr
之间存在外键关系,则可以使用导航属性。是的,第一个选项在我的情况下有效!非常感谢!