C# 在联接的基本LINQ查询上使用lambda表达式
在进行基本LINQ查询时,您可以稍后使用lambda表达式添加一个where子句,如下所示: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.
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
之间存在外键关系,则可以使用导航属性。是的,第一个选项在我的情况下有效!非常感谢!