C# LINQ to实体中的InvalidCastException

C# LINQ to实体中的InvalidCastException,c#,entity-framework,linq,C#,Entity Framework,Linq,我试图用Linq查询DBSet,但抛出了InvalidCastException: “…类型”System.Data.Entity.Infrastructure.DbQuery 1[Cercami.Model.Articolo]“on type”System.Data.Entity.DbSet 1[Cercami.Model.Articolo]。” 查询下方: private DbSet<Articolo> FiltraArticoliPerRichiestaDaDB(int id)

我试图用Linq查询
DBSet
,但抛出了
InvalidCastException

“…类型”System.Data.Entity.Infrastructure.DbQuery 1[Cercami.Model.Articolo]“on type”System.Data.Entity.DbSet 1[Cercami.Model.Articolo]。”

查询下方:

private DbSet<Articolo> FiltraArticoliPerRichiestaDaDB(int id)
{
    DbSet<Articolo> Result = (DbSet<Articolo>)from Art in DB.Articoli
                                               where Art.Fk_Richiesta == id
                                               select Art;
    return Result;
}
private DbSet filteraartitoliperrichiestadadb(int-id)
{
DbSet结果=(DbSet)以DB.Articoli表示的艺术
其中Art.Fk_Richiesta==id
选择艺术;
返回结果;
}
其中DB.Articoli是一个
DBSet

有什么帮助吗?

以下查询:

from Art in DB.Articoli
where Art.Fk_Richiesta == id
select Art;
将返回一个
IEnumerable
。也就是说,不能将其强制转换为
DbSet

此外,我认为您可能希望:

public IEnumerable<Articolo> FiltraArticoliPerRichiestaDaDB(int id)
{
    var arts = from Art in DB.Articoli
               where Art.Fk_Richiesta == id
               select Art;

    return arts;
}
public IEnumerable filteraArticoliperrichiestadadb(int-id)
{
var arts=来自艺术,单位为DB.Articoli
其中Art.Fk_Richiesta==id
选择艺术;
回归艺术;
}

我还更改了该方法的访问修饰符,因为我认为它应该是一个公共(可访问)方法。如果不是这样,您可以将其更改回
private

为什么要返回
DbSet
而不仅仅是普通的
IEnumerable
甚至
IQueryable
?你知道什么是
DbSet
吗?因为我想有两个不同的“DbSet”,第一个是来自实体框架的,第二个是临时集,所以我可以进行一些操作(比较和修改),最后将修改后的DbSet发送到模型。我认为对从框架创建的articolo(是一个db表)使用相同的类型很有用。也许这是个错误的想法?!?你不能像那样发送
DbSet
对象,你到底想做什么?是的,也许我弄错了,我看我也不能创建一个新的DbSet。我想做的是我在上一篇文章中试图解释的:我想有第二个临时设置来手动填充(没有框架),最后用它更新实体框架中的数据库。好吧,也许最好还是回到大问题上来。我有一张dB表(Artioli)。我需要的是将这些行与从过程中获得的另一组行进行比较。比较之后,我更新数据库。因此,使用
List
(从db进入List,创建一个新列表,比较list1和list2,等等)很简单,但我尝试使用实体框架和强类型类。我不认为只返回
DbSet
是个好主意,如果调用方随后执行
SaveChanges
@DavidG,事情可能会变得非常混乱。我明白你的意思,但是如何将艺术添加到将返回的集合中呢?这就是为什么建议使用
AddRange
的原因。但是你没有!
DbSet
并不意味着有一组值,而是代表可以从数据库中查询的对象列表。正确!然而,我看不出没有
AddRange
arts
的原因。你甚至建议删除这个?我认为OP不想返回DbSet真的,我猜这只是缺乏理解。