基于列表中的字符串选择 C# LINQ
Selecting based on string in a list C# LINQ
所以我有一个名为 class 的事件,其中包含一个 ListofInvites,它有不同用户的电子邮件地址(另一个 class 有一个 emailid 属性),现在我想要select 基于 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);
是的,抱歉,我昨晚发帖时很匆忙
所以我有这个活动class
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.'
希望下面的代码能解决您的问题。
var events = dataBase.Events.Where(p => p.listOfInvites.Contains(userEmailID)).ToList();
查看您的 class 会有所帮助,但我猜您的数据库中有一些名为 Event
的 class 的列表,每个列表都有一个 List<Invite>
属性,然后 EmailId
string
属性 在每个 Invite
实例上。
如果是这种情况,由于您的 EmailId
不是 Event
本身中的 属性,因此您必须遍历每个事件的 List<Invite>
以获得 EmailId
与之相关。
我猜测的关系是: Many 数据库中的事件; 很多 次邀请Event
;每个 Invite
.
EmailID
根据这个假设,我会这样做:
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>
代表我们的用户被邀请参加的所有活动。
在 Event
实体中,您声明了 IEnumerable<string>
属性 (listOfInvites
),而 Entity Framework 不支持基本类型列表,并且由于此 属性 未映射到数据库列,因此您不能在 where 表达式中使用它。
您需要使用 Event
实体的外键为 ListOfInvites
创建另一个实体(因此 table)。
所以我有一个名为 class 的事件,其中包含一个 ListofInvites,它有不同用户的电子邮件地址(另一个 class 有一个 emailid 属性),现在我想要select 基于 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);
是的,抱歉,我昨晚发帖时很匆忙
所以我有这个活动class
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.'
希望下面的代码能解决您的问题。
var events = dataBase.Events.Where(p => p.listOfInvites.Contains(userEmailID)).ToList();
查看您的 class 会有所帮助,但我猜您的数据库中有一些名为 Event
的 class 的列表,每个列表都有一个 List<Invite>
属性,然后 EmailId
string
属性 在每个 Invite
实例上。
如果是这种情况,由于您的 EmailId
不是 Event
本身中的 属性,因此您必须遍历每个事件的 List<Invite>
以获得 EmailId
与之相关。
我猜测的关系是: Many 数据库中的事件; 很多 次邀请Event
;每个 Invite
.
EmailID
根据这个假设,我会这样做:
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>
代表我们的用户被邀请参加的所有活动。
在 Event
实体中,您声明了 IEnumerable<string>
属性 (listOfInvites
),而 Entity Framework 不支持基本类型列表,并且由于此 属性 未映射到数据库列,因此您不能在 where 表达式中使用它。
您需要使用 Event
实体的外键为 ListOfInvites
创建另一个实体(因此 table)。