我正在使用Entity Framework 6
public class ALLEvent
{
[Key]
public long Eventid { get; set; }
public string eventname{ get; set; }
public string AttendingUsers{ get; set; }
public virtual List<User> Users{ get; set; }
}
public class Users
{
[Key]
public long id { get; set; }
public string Name{ get; set; }
}
我有一个AllEvent
类,在AttendingEvent
属性中我有一个以逗号分隔的UserId
列表。有什么方法可以在Users
的{{1}}属性中获取与会用户列表吗?
答案 0 :(得分:1)
你可以选择:
allEvent.Users = allEvent.AttendingUsers.Split(',').Select(
u => new User
{
Id = Convert.ToInt64(u)
}).ToList();
或者使用foreach循环:
var users = new List<Users>();
foreach (var u in allEvent.AttendingUsers.Split(',').ToList())
{
users.Add(new Users
{
Id = Convert.ToInt64(u)
});
}
allEvent.Users = users;
如果需要long类型,则使用Convert.ToInt64()方法。但请注意,这可能会引发异常。
https://msdn.microsoft.com/en-us/library/0zahhahw(v=vs.110).aspx
出现FormatException 要么 发生OverflowException
答案 1 :(得分:0)
您必须对每个事件进行查询以获取用户:
using(var ctx = new MyContext())
{
ctx.Configuration.LazyLoadingEnabled = false;
var events = ctx.AllEvent.ToList();
foreach(var event in events)
{
event.Users = ctx.Users.Where(u =>
event.AttendingUsers.Split(',').Cast<long>().ToList().Contains(u.id)).ToList();
}
}
更好的选择是让Users
对事件有一个外键(除非它有多对多,否则你需要一个中间表)。然后你可以使用lazy / eager加载。目前,virtual
关键字在Event
模型中没有执行任何操作,因为实体之间没有任何关系。
编辑答案,因为从字符串转换 - &gt;需要很长时间。