C# LINQ到实体:如何通过谓词获取所有值

C# LINQ到实体:如何通过谓词获取所有值,c#,entity-framework,linq,C#,Entity Framework,Linq,我试图得到所有具有相同谓词的值。例如:我有许多包记录,这些记录由它自己的Id、数据和设备Id组成,设备Id指示包从哪个设备到达 下面是我创建的函数,它只返回第一个包 public Package GetPackageByDeviceId(int id) { return avldbContext.Packages.Where(p => p.DeviceId == id).FirstOrDefault(); } 关于如何获得所有包裹有什么建议吗 publi

我试图得到所有具有相同谓词的值。例如:我有许多包记录,这些记录由它自己的Id、数据和设备Id组成,设备Id指示包从哪个设备到达

下面是我创建的函数,它只返回第一个包

 public Package GetPackageByDeviceId(int id)
    {
        return avldbContext.Packages.Where(p => p.DeviceId == id).FirstOrDefault();
    }
关于如何获得所有包裹有什么建议吗

public IEnumerable<Package> GetPackagesByDeviceId(int id)
{
    return avldbContext.Packages.Where(p => p.DeviceId == id);
}
首先,您需要指定方法的s char end。因为该方法返回多行。而不是没有第一个预设。您需要使用ToList扩展方法来提取所有记录。祝你好运

编辑: 顺便说一下,您的代码看起来仍然在寻找主键。你需要调整你的预测。

如果你想得到一个可数的结果


remove.FirstOrDefault函数。如果希望得到多个结果,请不要使用First。要么直接返回结果,要么用ToList或ToArray等急切地加载结果。您没有尝试其他方法有什么原因吗?但是有没有其他方法不将包实体更改为IEnumerable或List?因为我用的是codefirst,它能让事情变得更复杂difficult@hellodave-抱歉,但我不理解您的要求,因为您希望有一个列表,所以您的方法自然必须返回一个列表-要精确到一个包列表,因此IEnumerable,单个包不能包含多个包
public List<Package> PackagesByDeviceId(int id)
{
    return avldbContext.Packages.Where(p => p.DeviceId == id).ToList();
}
public IEnumerable<Package> GetPackagesByDeviceId(int id)
{
    return avldbContext.Packages.Where(p => p.DeviceId == id);
}
public List<Package> GetPackagesByDeviceId(int id)
{
    return avldbContext.Packages.Where(p => p.DeviceId == id).ToList();
}