需要 LINQ 表达式根据外键值过滤表

我有一张世界事件表。每个世界事件都有一个在某个国家/地区发生的与该世界事件相关的演示列表


public class WorldEvent

{

    public int ID { get; set; }

    public string Name { get; set; }

    public List<Presentation> PresentationList { get; set; }

}


public class Presentation

{

    public int ID { get; set; }

    public string Name { get; set; }

    public string Country { get; set; }

}


public class WorldEventService

{

    public List<WorldEvent> GetWorldEvents()

    {

        List<WorldEvent> worldEventList = new List<WorldEvent>();

        List<Presentation> presentationList = new List<Presentation>();


        // Create list of Presentations for WorldEvent_1

        presentationList = new List<Presentation>()

        {

            new Presentation() { ID = 1, Name = "Presentation_1", Country = "Germany",},

            new Presentation() { ID = 2, Name = "Presentation_2", Country = "UK",},

            new Presentation() { ID = 3, Name = "Presentation_3", Country = "UK",},

        };


        // Add WorldEvent_1 to the list of WorldEvents

        worldEventList.Add(new WorldEvent()

        {

            ID = 1,

            Name = "WorldEvent_1",

            PresentationList = presentationList,

        });


        // Create list of Presentations for WorldEvent_2

        presentationList = new List<Presentation>()

        {

            new Presentation() { ID = 4, Name = "Presentation_4", Country = "USA",},

            new Presentation() { ID = 5, Name = "Presentation_5", Country = "UK",},

            new Presentation() { ID = 6, Name = "Presentation_6", Country = "Japan",},

        };



现在 - 我怎样才能获得在英国进行演示的 WorldEvents 列表。而且 - 在我感兴趣的列表中,WorldEvents 应仅包含有关英国演示文稿的信息。换句话说,我需要这个结果:


世界事件_1(演示文稿_2、演示文稿_3)

世界事件_2(演示_5)


德玛西亚99
浏览 91回答 4
4回答

慕村9548890

如果我明白你想要什么。有很多方法可以做到这一点,但是您可以先进行过滤,然后WorldEvents使用过滤后的列表重新创建Presentationvar country = "UK";var result = worldEventList.Where(x => x.PresentationList.Any(y => y.Country == country))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Select(x => new WorldEvent()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ID = x.ID,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = x.Name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PresentationList = x.PresentationList&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Where(y => y.Country == country)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .ToList()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).ToList();或者正如Gert Arnold在评论中指出的那样,您可以在事后过滤var result = worldEventList.Select(x => new WorldEvent()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ID = x.ID,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Name = x.Name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PresentationList = x.PresentationList&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Where(y => y.Country == country).ToList()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}).Where(x => x.PresentationList.Any())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.ToList();注意:因为这不是投影(选择)每个Presentation,所以您对 aPresentation中所做的任何更改都result将反映在原始数据中。如果您不希望这样,则需要重新创建每个Presentation

吃鸡游戏

var worldEvent = new WorldEventService.GetWorldEvents();var filter = "";//userInputvar filteredResult = worldEvent.Select(r => new WorldEvent&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PresentationList = r.PresentationList.Where(c => c.Country == filter).ToList(),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ID = r.Id,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Name = r.Name&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}).ToList();

慕容森

public static List<WorldEvent> Filter(string Country, List<WorldEvent> events) {&nbsp; &nbsp; &nbsp; &nbsp; var evs = from ev in events.Where(x => x.PresentationList.Any(y => y.Country == Country))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let targetPres = from pres in ev.PresentationList&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;where pres.Country == Country&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select pres&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select new WorldEvent {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ID = ev.ID,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = ev.Name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PresentationList = targetPres.ToList()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; return evs.ToList();&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }

繁星coding

不确定我的理解是否正确,我猜您的 WorldEvent 和演示表之间存在一对多的关系。因此,如果您想通过使用 EntityFramework 获取在英国发生的所有 WorldEvents 及其相关演示,您可以尝试以下操作:worldEventContext&nbsp; &nbsp; .Include(PresentationContext)&nbsp; &nbsp; .Select(&nbsp; &nbsp; &nbsp; &nbsp; w => new&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; w.ID,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; w.Name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PresentationList = w.PresentationContext.Where(p => p.Country == "UK")&nbsp; &nbsp; &nbsp; &nbsp; })
打开App,查看更多内容
随时随地看视频慕课网APP