所以我有一个名为event的类,其中包含List ListofInvites,它有不同用户的电子邮件地址(另一个具有emailid属性的类),现在我想根据listofinvites字符串是否包含该特定电子邮件来选择所有事件
我试过这个但是我收到了一个错误
var userEmailID = this.User.Identity.GetUserName();
var events = this.dataBase.Events
.OrderBy(e => e.DateAndTime)
.Where(e => e.listOfInvites.Contains(userEmailID))
.Select(EventViewModel.ViewModel);
是的,对不起,昨晚发布时,我很匆忙
所以我有这个活动课
public class Event
{
public Event()
{
this.IsPublic = true;
this.DateAndTime = DateTime.Now;
}
[Key]
public int EventID { get; set; }
[Required]
[MaxLength(200)]
public string Title { get; set; }
[Required]
public DateTime DateAndTime { get; set; }
public string AuthorId { get; set; }
public int Duration { get; set; }
public string Description { get; set; }
public string OtherDetails { get; set; }
[MaxLength(200)]
public string Location { get; set; }
public bool IsPublic { get; set; }
public IEnumerable<string> listOfInvites { get; set; }
public string InviteList { get; set; }
}
}
我得到的错误是
System.NotSupportedException: 'The specified type member 'listOfInvites' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.'
在Event
实体中,您声明了IEnumerable<string>
属性(listOfInvites
),而实体框架中不支持基本类型列表,并且由于此属性未映射到数据库列,因此您无法在where表达式中使用它。
您需要使用ListOfInvites
实体的外键为Event
创建另一个实体(因此表)。
希望以下代码能解决您的问题。
var events = dataBase.Events.Where(p => p.listOfInvites.Contains(userEmailID))。ToList();
查看你的课程会有所帮助,但我猜你在你的数据库中有一个名为Event
的类的列表,每个类都有一个List<Invite>
属性,然后在每个EmailId
实例上有一个string
Invite
属性。如果是这种情况,因为你的EmailId
不是Event
本身的属性,你将不得不遍历每个事件的List<Invite>
以获得与之相关的EmailId
。我猜的关系是:数据库中有很多事件;每个Event
都有很多邀请;每个EmailID
上有一个Invite
。
遵循这些假设,我会这样做:
var events = this.database.Events.Where(e => e.ListOfInvites.Any(i => i.EmailId.Contains(userEmailId))).ToList();
因此,从数据库中(假设)List<Event>
上的每个事件中,我们将搜索其中ListOfInvites
属性(即e => e.ListOfInvites
部分)中的每个邀请,寻找任何邀请,其中EmailId
与我们通过的那个匹配,即: i => i.EmailId.Contains(userEmailId)
。这个var
将成为一个List<Event>
,代表我们的用户被邀请的所有事件。