gpt4 book ai didi

c# - 异常 : Type arguments cannot be inferred when using LINQ

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:22 24 4
gpt4 key购买 nike

我的查询运行正常,

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
)

当我尝试为相同目的创建 LINQ 时,我没有得到预期的结果。

 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 }) 行它说:

The type arguments for method 'System.Linq.Enumerable.Contains<TSource>(System.Collections.Generic.IEnumerable<TSource>, TSource)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

最佳答案

您不需要每次都实例化一个单一属性的匿名类型来执行 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:

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
};

关于c# - 异常 : Type arguments cannot be inferred when using LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com