我正在尝试将下面提到的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的初学者
答案 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.Announcements
是Announcement
个对象的集合,则不需要匿名类型或使用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();