我有一段代码可以检索List
个User
个对象。
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;
}
}
参数sessionStrs
和ip
已正确传递到方法中。但是,我收到以下错误:
当我不使用任何.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
语句。
答案 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
。