"序列不包含匹配元素"在ToList()上

时间:2014-08-20 02:09:49

标签: c# sql linq entity-framework

我有一段代码可以检索ListUser个对象。

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

参数sessionStrsip已正确传递到方法中。但是,我收到以下错误:

error

当我不使用任何.First().Single()时,如何导致此类错误?我只是想让一个适合数组的表中的所有项目都返回List。我以前从未见过这样的问题。

以下代码行甚至会导致错误:

var ret = ctx.Sessions.ToList();

这是我的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; }

}

这是我的Session模型:

[Table("tbl_Sessions")]
public class Session
{

    [Column("SessionID")]
    [MaxLength(24)]
    [Required]
    [Key]
    public string ID { get; set; }

    [Column("UserID")]
    [Required]
    public int UserID { get; set; }

    [Column("IP")]
    [MaxLength(24)]
    [Required]
    public string IP { get; set; }

    [ForeignKey("UserID")]
    public virtual User User { get; set; }

}

注意 这两个Classes都是正确的命名空间,并且还有正确的using语句。

5 个答案:

答案 0 :(得分:1)

这个问题的实际答案与我的一个models有两个Keys这一事实有关,每个string都是model。当我将int改为Key而{{1}}时,一切运作良好。

答案 1 :(得分:0)

可能是sessionStrs为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;
    }
}

答案 2 :(得分:0)

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

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>();

答案 3 :(得分:0)

谷歌把我带到了这里,所以我会把我的经验带给那些有类似问题的人。

我的项目使用EF fluent配置来查询现有数据库。尽管能够使用其他工具查询表格,但我无法弄清楚为什么我会收到任何数据。

在我的头靠在墙上之后,我终于发现我错误地标记了列类型:

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

答案 4 :(得分:0)

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