Linq - 模拟存在表达式时的转换错误

时间:2014-04-11 12:17:34

标签: c# linq entity-framework lambda exists

我使用Lambda Expressions遇到了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是一个字符串参数。
  4. 我的代码是:

    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()但没有成功。

    感谢阅读的人, 巴勃罗。

1 个答案:

答案 0 :(得分:0)

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

我愿意

//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);