在进行基本的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
}
有没有办法使用lambda表达式来实现在where子句中添加这两个条件?
或者我应该使用lambda表达式替换所有基本LINQ查询吗?
答案 0 :(得分:1)
基本上,您还需要同时选择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));