2012-06-17 9 views
2

當我有了這個查詢工作正常推斷,異常:類型參數可以當我嘗試創建一個LINQ爲同一目的,我沒有得到預期的結果不使用LINQ

select * 
from Materia 
where 
    Cursar_Cursada=0 
    and idmateria NOT IN (
     select IdMateria 
     from UsuarioMateria 
     where IdUsuario=11 
) 
    or Cursar_Cursada in (
    select Materia.Codigo_Materia 
    from UsuarioMateria join Materia on UsuarioMateria.IdMateria = Materia.IdMateria 
) 

from t in obj.Materias 
where 
    t.Cursar_Cursada == 0 && 
    !(from t0 in obj.UsuarioMaterias 
    where 
     t0.IdUsuario == 11 
    select new 
    { 
     t0.IdMateria 
    }).Contains(new { t.IdMateria }) || 

    (from t0 in obj.UsuarioMaterias 
     join t1 in obj.Materias on t0.IdMateria equals  IdMateria 
     select new 
     { 
      t1.Codigo_Materia 
     }).Contains(new { t.Cursar_Cursada }) // <- error here 
select new 
{ 
    t.IdMateria, 
    t.Nombre, 
    t.Cuatrimestre, 
    t.Contenido, 
    t.Cursar_Cursada, 
    t.Cursar_Aprobada, 
    t.Rendir_Aprobada, 
    t.Codigo_Materia 
}; 

誤差上,說.Contains(new { t.Cursar_Cursada })的行,它表示:

爲方法'System.Linq.Enumerable.Contains<TSource>(System.Collections.Generic.IEnumerable<TSource>, TSource)'類型參數不能從使用推斷。嘗試明確指定類型參數。

+0

任何幫助,將不勝感激! – esteban

+0

重新格式化以便更容易閱讀您的代碼 – Sascha

+0

您可以試試.Contains(t.Cursar_Cursada)? – Sascha

回答

1

您不需要每次都實例化一個單一屬性的匿名類型來執行Contains檢查。另外

from t in obj.Materias 
where t.Cursar_Cursada == 0 && 
!( 
    from t0 in obj.UsuarioMaterias 
    where t0.IdUsuario == 11 
    select t0.IdMateria 
).Contains(t.IdMateria) || 
( 
    from t0 in obj.UsuarioMaterias 
    join t1 in obj.Materias on t0.IdMateria equals t1.IdMateria 
    select t1.Codigo_Materia 
).Contains(t.Cursar_Cursada) 
select new 
{ 
    t.IdMateria, 
    t.Nombre, 
    t.Cuatrimestre, 
    t.Contenido, 
    t.Cursar_Cursada, 
    t.Cursar_Aprobada, 
    t.Rendir_Aprobada, 
    t.Codigo_Materia 
}; 

,您可以將您的Contains運營商轉換爲Any由包括平等的支票作爲您的內部查詢中的條件:相反,你應該直接select你的財產

from t in obj.Materias 
where t.Cursar_Cursada == 0 && 
!(
    from t0 in obj.UsuarioMaterias 
    where t0.IdUsuario == 11 && 
      t0.IdMateria == t.IdMateria 
    select t0 
).Any() || 
( 
    from t0 in obj.UsuarioMaterias 
    join t1 in obj.Materias on t0.IdMateria equals t1.IdMateria 
    where t1.Codigo_Materia == t.Cursar_Cursada 
    select t1 
).Any() 
select new 
{ 
    t.IdMateria, 
    t.Nombre, 
    t.Cuatrimestre, 
    t.Contenido, 
    t.Cursar_Cursada, 
    t.Cursar_Aprobada, 
    t.Rendir_Aprobada, 
    t.Codigo_Materia 
}; 
+0

謝謝。它現在工作完美。 – esteban

相關問題