将Sql查询转换为LINQ

时间:2012-09-05 06:30:33

标签: asp.net .net sql linq

我正在尝试将下面提到的SQL查询转换为LINQ查询

Qry = "select Announcement, StartDate, Enddate,Annkey from
Announcements ";   Qry = Qry & " where Startdate <= #" & Today & "# " 
Qry = Qry & " and Enddate >= #" & Today & "# "  Qry = Qry + " order by
StartDate, Enddate";

到目前为止我做了什么 -

public bool Selectdatafromannouncements()
        {


            List<Announcement> lstAnnounce = new List<Announcement>(
                from l in objVaccinationContext.Announcements
                where
                    l.StartDate.Value < DateTime.Today
                    && l.EndDate.Value < DateTime.Today
                orderby l.StartDate, l.EndDate
                select new (l.Announcement1, l.StartDate, l.EndDate, l.AnnouncementID)
                );


            return true;
        }
  

在选择新附近获得错误(正如预期的类型请帮助我,我是LINQ的初学者

5 个答案:

答案 0 :(得分:2)

此处不需要构造函数来创建列表。 花括号用于创建匿名对象,因此不要声明List<Announcement>类型的lstAnnounce,而是更好地使用var关键字。

所以你可以拥有这个:

var query = from l in objVaccinationContext.Announcements
                  where
                    l.StartDate.Value < DateTime.Today
                    && l.EndDate.Value < DateTime.Today
                orderby l.StartDate, l.EndDate
                select new {l.Announcement1, l.StartDate, l.EndDate, l.AnnouncementID };
var lstAnnounce = query.ToList();

如果您需要Annoucement对象列表:

var query = 
                from l in objVaccinationContext.Announcements
                where
                    l.StartDate.Value < DateTime.Today
                    && l.EndDate.Value < DateTime.Today
                orderby l.StartDate, l.EndDate
                select l;
List<Announcement> lstAnnounce = query.ToList();

答案 1 :(得分:1)

如果objVaccinationContext.AnnouncementsAnnouncement个对象的集合,则不需要匿名类型或使用List的构造,您可以这样做:

List<Announcement> lstAnnounce = (
    from l in objVaccinationContext.Announcements
    where
        l.StartDate.Value < DateTime.Today && 
        l.EndDate.Value < DateTime.Today
    orderby l.StartDate, l.EndDate
    select l)
    .ToList();

答案 2 :(得分:0)

select new (l.Announcement1, l.StartDate, l.EndDate, l.AnnouncementID)

错了

尝试匿名类型:

select new {var1 = l.Announcement1, var2 = l.StartDate, vr3 = l.EndDate, var4 = l.AnnouncementID}

答案 3 :(得分:0)

问题是,您在执行anonymous时会将Announcement类型的项目插入select new (l.Announcement1, l.StartDate, l.EndDate, l.AnnouncementID)列表中。 您需要做的是显式创建Announcement类型的实例:

List<Announcement> lstAnnounce = 
objVaccinationContext.Announcements
                     .OrderBy(l => l.StartDate)
                     .ThenBy(l => l.EndDate)
                     .Where(l => l.StartDate.Value < DateTime.Today &&
                                 l.EndDate.Value < DateTime.Today)
                     .Select(l => new Announcement
                     {
                         Announcement1 = l.Announcement1,
                         AnnouncementId = l.AnnouncementId,
                         EndDate = l.EndDate,
                         StartDate = l.StartDate
                     })
                     .ToList();

答案 4 :(得分:0)

在原始查询中,您使用

Startdate <= Today  and Enddate >= Today 

而你的Linq有

l.StartDate.Value < DateTime.Today
&& l.EndDate.Value < DateTime.Today

假设您的最佳查询是您所追求的,这是否适合您:

 List<Announcement> lstAnnounce = 
            (from l in objVaccinationContext.Announcements
            where
                l.StartDate.Value <= DateTime.Today
                && l.EndDate.Value >= DateTime.Today
            orderby l.StartDate, l.EndDate
            select new Announcement
                 {
                     Announcement1 = l.Announcement1,
                     StartDate = l.StartDate,
                     EndDate = l.EndDate,
                     AnnouncementId = l.AnnouncementId
                 }).ToList();