【问题标题】:Using lambda expressions on joined basic LINQ query在连接的基本 LINQ 查询上使用 lambda 表达式
【发布时间】:2017-03-02 12:59:45
【问题描述】:

在进行基本 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 查询吗?

【问题讨论】:

  • 唯一应该在连接中的部分是c.Comaut equals u.Gitusr。无论如何,其余的都应该在哪里。如果c.Comautu.Gitusr 之间存在外键关系,您也可以使用导航属性

标签: c# mysql linq lambda


【解决方案1】:

基本上,您还需要推迟select,首先选择cu,然后再选择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);

如果ClgcomDvusr 之间的关系是多对一的,那么您可以执行以下操作,因为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));

【讨论】:

  • 是的,第一个选项在我的情况下有效!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多