Linq-模拟现有表达式时发生转换错误

本文关键字:转换 错误 表达式 模拟 Linq- | 更新日期: 2023-09-27 17:57:58

我在使用Lambda表达式时遇到Linq问题。我正在尝试这样做选择

SELECT L.IDLLAMADO FROM LLAMADOS L WHERE EXISTS (SELECT D.IDLLAMADO FROM DIAGNOSTICO D WHERE D.DESCRIPCION LIKE '%SOME VALUE%')

一些注意事项:

  1. 我使用IQueryable,因为我附加了连接和位置,这取决于方法的参数
  2. 在这个例子中,我只映射了复杂类中的一个属性,因为其他属性在这个例子里没有用处
  3. diagonostico是一个字符串参数

我的代码是:

DbSet<Llamados> llamados = context.Set<Llamados>();
IQueryable<ComplexLlamadosAfil> query = llamados
.Select(e => new ComplexLlamadosAfil { IdLlamado = e.IdLlamado });
//If some conditions
query = query.Where(e => diagnosticos.Any(d => d.IdLlamado == e.IdLlamado &&
                    d.Descripcion.Contains(diagnostico)) == true);

没有编译错误,但当我运行这个时,我一直得到这个错误:

对象类型

'System.Data.Objects.ObjectQuery`1[GAMP.MO.VW_DIAGNOSTICOS_LLAMADO]'

无法转换为

'System.Data.Entity.DbSet`1[GAMP.MO.VW_DIAGNOSTICOS_LLAMADO]'.

我也试过用.TakeWhile()代替.Where(),但没有成功。

感谢各位读者,巴勃罗。

Linq-模拟现有表达式时发生转换错误

好吧,消息很清楚,不是吗?

我会做

//Don't tell that it's a DbSet<Llamados>. You want an IQueryable<Llamados>
IQueryable<Llamados> llamados = context.Set<Llamados>().AsQueryable();
IQueryable<ComplexLlamadosAfil> query = llamados
.Select(e => new ComplexLlamadosAfil { IdLlamado = e.IdLlamado });
//If some conditions
query = query.Where(e => diagnosticos.Any(d => d.IdLlamado == e.IdLlamado &&
                    d.Descripcion.Contains(diagnostico)) == true);

或者只使用var

var llamados = context.Set<Llamados>().AsQueryable();
var query = llamados
.Select(e => new ComplexLlamadosAfil { IdLlamado = e.IdLlamado });
//If some conditions
query = query.Where(e => diagnosticos.Any(d => d.IdLlamado == e.IdLlamado &&
                    d.Descripcion.Contains(diagnostico)) == true);