我正在尝试将此sql查询转换为linq
select * from fichepfe where valid = 1 and id_fiche in ( select fiche_id from enseignant_fiche where id_ens = '*variable*');
此查询可以返回多行。
这是我尝试过的,但我不断得到这个错误
运算符“==”不能应用于“method group”和“iqueryable”类型的操作数
我尝试的是:
var fiches = (from fiche in _context.Fichepfes where fiche.Valid == true && fiche.IdFiche ==
(from fens in _context.enseignant_fiche where IdEns == *variable*
select fens.ficheId )
select fiche ).ToList();
提前谢谢。
2条答案
按热度按时间wj8zmpe11#
这应该起作用:
但是,这可能会导致客户机执行部分查询,因为linq to sql可能无法转换
.Any()
调用原始查询。更好的方法是使用连接:
连接也可以用另一种方式完成,但在我的电脑上速度要慢5到6倍。
txu3uszq2#
你有一张table吗
Fiches
(fichepfes)和一张tableEnseignantFiches
(不知道怎么回事)。两者之间似乎有某种联系
Fiches
以及EnseignantFiches
:每Fiche
只有一个EnseignantFiche, namely the
忽视that the foreign key
idfiche指的是。 此外,每个
Fiche具有布尔属性
Valid; 每
EnseignantFiche具有(字符串?)属性
IdEns. 要求:全部给我
Validfiches,拥有一个值为
IdEns` 等于“变量”大写:
从fiches表中,只保留有效的。
从enseignantfiches表中,只保留idens等于“variable”的值
在主键等于外键时联接这两个表,并选择要使用的属性。
当然,你可以在一个大的linq语句中这样做。因为查询尚未执行,所以这不会提高处理速度。它必然会降低可读性、可测试性和可重用性。