C# &引用;序列不包含匹配元素“;关于ToList()

C# &引用;序列不包含匹配元素“;关于ToList(),c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,我有一段代码,可以检索用户对象的列表 public List<User> GetUsersBySessions(string[] sessionStrs, string ip) { if (sessionStrs == null || string.IsNullOrEmpty(ip)) return new List<User>(); using (var ctx = new DataContext()) { var

我有一段代码,可以检索
用户
对象的
列表

public List<User> GetUsersBySessions(string[] sessionStrs, string ip)
{
    if (sessionStrs == null || string.IsNullOrEmpty(ip))
        return new List<User>();
    using (var ctx = new DataContext())
    {
        var ret = ctx.Sessions.Include("User").Where(s => sessionStrs.Contains(s.ID) && s.IP.Equals(ip)).Select(s => s.User).ToList();
        return ret;
    }
}
这是我的
DataContext

public class DataContext : DbContext
{
    public GenericDataContext()
        : base(CONNECTION_STRING) //My CONNECTION_STRING is defined somewhere else, but I'm going to hide that for security's sake.
    {
    }

    public DbSet<Password> Passwords { get; set; }
    public DbSet<Session> Sessions { get; set; }
    public DbSet<User> Users { get; set; }

}
注意
两个
类都有正确的名称空间,并且使用
语句也有正确的

可能是会话trs为null:

public List<User> GetUsersBySessions(string[] sessionStrs, string ip)
{
    using (var ctx = new DataContext())
    {
        var ret = ctx.Sessions.Include("User");
        if(sessionStrs!=null && sessionStrs.Any())
           ret =ret.Where(s => sessionStrs.Contains(s.ID));
        if(!string.IsNullOrEmpty(ip))
           ret =ret.Where(s => s.IP.Equals(ip));

        return ret.Any()?ret.Select(s => s.User).ToList():NULL;
    }
}
public List GetUsersBySessions(string[]sessionStrs,string ip)
{
使用(var ctx=new DataContext())
{
var ret=ctx.Sessions.Include(“用户”);
if(sessionStrs!=null&&sessionStrs.Any())
ret=ret.Where(s=>sessionStrs.Contains(s.ID));
如果(!string.IsNullOrEmpty(ip))
ret=ret.Where(s=>s.IP等于(IP));
返回ret.Any()?ret.Select(s=>s.User).ToList():NULL;
}
}

在选择之前,请尝试检查是否有元素:

var ret = ctx.Sessions.Where(s => sessionStrs.Contains(s.ID) && s.IP.Equals(ip));
if (ret.Any())
    return ret.Select(s => s.User).ToList();
else
    return null; // or new List<User>();
var ret=ctx.Sessions.Where(s=>sessionStrs.Contains(s.ID)和&s.IP.Equals(IP));
if(ret.Any())
返回ret.Select(s=>s.User.ToList();
其他的
返回null;//或新列表();

这个问题的实际答案与以下事实有关:我的一个
型号
有两个
,每个键都是
字符串
。当我将said
模型改为
int
作为
键时,一切都很好。

谷歌把我带到了这里,所以我会把我的经验告诉任何有类似问题的人

我的项目使用EF fluent配置查询现有数据库。尽管我可以使用其他工具查询表,但我无法理解为什么我会收到任何返回的数据

在我的头撞到墙上之后,我终于发现我错贴了柱类型,就像这样:

Property(x => x.DateCreated)
    .HasColumnName("datetiem") // strings are the devil

如果要从列表中提取内容,请确保使用的是
First或default
而不是
First

可能是
sessionStrs
null
我使用的断点。不是。它是一个
字符串[]
,有两个值,每个值都是数据库中正确的sessionid。我应该得到两个匹配项。我怀疑用户表中有匹配项。这导致了一个tolist问题我刚刚尝试了一个方法,该方法只返回了
ctx.Sessions
中的所有项目,不包括
User
。同样的错误。是我的
型号吗
?你能为你的
数据上下文发布一些代码吗
?更新了我的问题以包含空检查。它仍然不起作用,同样的错误,现在只剩下两行了(但那一行的内容相同)。实际上,我在第一次创建
var ret
的那一行上得到了错误。我删除了包含项,请执行此代码并告诉我们您是否得到了相同或其他异常以及如何得到这一行。
var ret = ctx.Sessions.Where(s => sessionStrs.Contains(s.ID) && s.IP.Equals(ip));
if (ret.Any())
    return ret.Select(s => s.User).ToList();
else
    return null; // or new List<User>();
Property(x => x.DateCreated)
    .HasColumnName("datetiem") // strings are the devil