基于列表中的字符串选择 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)。