基于列表C#LINQ中的字符串进行选择

问题描述 投票:0回答:3

所以我有一个名为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.'

c# asp.net-mvc linq-to-entities
3个回答
0
投票

Event实体中,您声明了IEnumerable<string>属性(listOfInvites),而实体框架中不支持基本类型列表,并且由于此属性未映射到数据库列,因此您无法在where表达式中使用它。 您需要使用ListOfInvites实体的外键为Event创建另一个实体(因此表)。


0
投票

希望以下代码能解决您的问题。

var events = dataBase.Events.Where(p => p.listOfInvites.Contains(userEmailID))。ToList();


0
投票

查看你的课程会有所帮助,但我猜你在你的数据库中有一个名为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>,代表我们的用户被邀请的所有事件。

© www.soinside.com 2019 - 2024. All rights reserved.