如何获取用户列表

时间:2016-01-26 12:07:37

标签: c# entity-framework c#-4.0

我正在使用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}}属性中获取与会用户列表吗?

2 个答案:

答案 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;需要很长时间。