繁体   English   中英

在实体查询的强类型LINQ中填充列表

[英]Populating a List in a Strongly Typed LINQ to Entities Query

我是LINQ新手,我只是想在LINQ to Entities查询中填充一个List。 任何帮助将不胜感激。

类“ SearchCriteria”如下所示:

public class SearchCriteria
{
   public IList<DTOEventType1> eventTypes { get; set; }
   public IList<DTOLocation1> locs { get; set; }
   [DataType(DataType.Date)]
   [DisplayFormat(ApplyFormatInEditMode = true,
      DataFormatString="0:dd/MM/yyyy}")]
   public DateTime? searchDate { get; set; }
   public List<PortfolioLibraryMVC4V2.Domain.DTO.DTOCalendarEvents> 
      CalendarEvents;
}

我的查询如下所示:

var query = from E in medRepo.evt
    join L in medRepo.loc on E.LocationID equals L.LocationID
    join ET in medRepo.evtType on E.EventTypeID equals    
               ET.EventTypeID 
    where IDsOfSelectedEventTypes.Contains(E.EventTypeID) &&
          IDsOfSelectedLocations.Contains(L.LocationID) && 
          E.EventStart > eventslocs.searchDate 

    select new SearchCriteria
    {
        CalendarEvents = query.Select(x => new DTOCalendarEvents
        {
            Name = ET.Name,
            EventStart = E.EventStart,
            EventEnd = E.EventEnd
            }).ToList()
        };

        var datalist = query.ToList();

我正在尝试在上述查询的select中填充Class SearchCriteria中的列表“ CalendarEvents”。 当前,我收到错误消息“在声明之前尝试使用局部变量查询”,因此显然我的语法不正确。 有人可以告诉我正确的方法吗?

谢谢,

皮特

您可以在linq查询之外使用SearchCriteria

var searchCriteria = new SearchCriteria();

searchCriteria.CalendarEvents = (from E in medRepo.evt
                                 join L in medRepo.loc 
                                 on E.LocationID equals L.LocationID
                                 join ET in medRepo.evtType 
                                 on E.EventTypeID equals ET.EventTypeID 
                                 where                     
                                 IDsOfSelectedEventTypes.Contains(E.EventTypeID) 
                                 && IDsOfSelectedLocations.Contains(L.LocationID) 
                                 && E.EventStart > eventslocs.searchDate)
                                .Select(x => new DTOCalendarEvents
                                {
                                 Name = ET.Name,
                                 EventStart = E.EventStart,
                                 EventEnd = E.EventEnd
                                })
                               .ToList();

基本上,我们只需要LINQ查询中的事件列表。

试试看:

var query = from E in medRepo.evt
    join L in medRepo.loc on E.LocationID equals L.LocationID
    join ET in medRepo.evtType on E.EventTypeID equals    
               ET.EventTypeID 
    where IDsOfSelectedEventTypes.Contains(E.EventTypeID) &&
          IDsOfSelectedLocations.Contains(L.LocationID) && 
          E.EventStart > eventslocs.searchDate 
    select new DTOCalendarEvents
    {
            Name = ET.Name,
            EventStart = E.EventStart,
            EventEnd = E.EventEnd
    };

    var datalist = query.ToList();

var searchCriteria = new SearchCriteria();
searchCriteria.CalendarOfEvents = datalist;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM