C# linq最大和最小日期
将此SQL SP移植到linq语句时遇到一些问题。sql逻辑是基本的,获取最小和最大开始日期,如果它们相等,则使用MeetingDate的最小日期值。MeetingDate是一个字符串,因此我将在MM/dd/yyyy中使用它。如果它们不相等,则将最小起始日期和最大起始日期合并在一起C# linq最大和最小日期,c#,entity-framework,C#,Entity Framework,将此SQL SP移植到linq语句时遇到一些问题。sql逻辑是基本的,获取最小和最大开始日期,如果它们相等,则使用MeetingDate的最小日期值。MeetingDate是一个字符串,因此我将在MM/dd/yyyy中使用它。如果它们不相等,则将最小起始日期和最大起始日期合并在一起 LINQ var Meeting = (from m in db.Meetings join md in db.MeetingDates on m.MeetingId equals md.Meetin
LINQ
var Meeting = (from m in db.Meetings
join md in db.MeetingDates on m.MeetingId equals md.MeetingId
join mf in db.MeetingFiles on m.MeetingId equals mf.MeetingId
join fm in db.FileManagers on mf.FileManagerId equals fm.FileManagerId
join vwGP in db.vwGuidelinePanels on m.GroupId equals vwGP.GroupId
where mf.FileCategoryItemDictionaryId == 755
select new Model.Meeting
{
MeetingId = m.MeetingId,
GroupId = m.GroupId,
MeetingDate = max(md.StartDate) == min(md.StartDate)? min(md.StartDate)
min(md.StartDate) + ' - ' + max(md.StartDate)
}).ToList();
SQL
case
when Convert(varchar(10),min(md.StartDate),101)=Convert(varchar(10),max(md.StartDate),101)
then Convert(varchar(10),min(md.StartDate),101)
else
Convert(varchar(10),min(md.StartDate),101)+' - '+Convert(varchar(10),max(md.StartDate),101) end
输出
04/15/2010
05/06/2010
05/12/2010
06/13/2010 - 06/16/2010
06/16/2010 - 06/19/2010
使用最大值和最小值时出现运行时错误
一个问题是min(md.StartDate)
将是DateTime
类型,而min(md.StartDate)+'-'+max(md.StartDate)
的减法将是TimeSpan
类型。如果你想知道输出的方式,那么转换成字符串可能是最好的选择。下面是一个未经测试的粗略示例。我已经更新了我的答案,以使用正确的LINQ语法。然而,这一点也未经检验
MeetingDate = md.StartDate.Max() == md.StartDate.Min()? md.StartDate.Min().ToString("MM/dd/yyyy") : string.Format("{0: MM/dd/yyyy} - {1: MM/dd/yyyy}", md.StartDate.Min(), md.StartDate.Max());
一个问题是min(md.StartDate)
将是DateTime
类型,而min(md.StartDate)+'-'+max(md.StartDate)
的减法将是TimeSpan
类型。如果你想知道输出的方式,那么转换成字符串可能是最好的选择。下面是一个未经测试的粗略示例。我已经更新了我的答案,以使用正确的LINQ语法。然而,这一点也未经检验
MeetingDate = md.StartDate.Max() == md.StartDate.Min()? md.StartDate.Min().ToString("MM/dd/yyyy") : string.Format("{0: MM/dd/yyyy} - {1: MM/dd/yyyy}", md.StartDate.Min(), md.StartDate.Max());
“将最小起始日期和最大起始日期加在一起”-这是什么意思?您希望结果是什么数据类型?看起来您可能正在尝试获取基于文本的结果,但min date值不是字符串…类似于2010年6月8日-2010年9月8日不确定您在这里试图实现什么,但我看到了一个问题min(md.StartDate)
将是DateTime
类型,而min(md.StartDate)+'-'+max(md.StartDate)
的减法将是TimeSpan
类型。我是否将min(md.StartDate)转换为stringRight?请在问题中澄清这一点。您不希望“使用MeetingDate的最小日期值”-您希望将最小日期值转换为字符串。您可能应该首先将该更改应用到LINQ中。。。以及告诉我们实际的问题是什么。(您已经向我们展示了一些LINQ,但没有描述它对您不起作用的方式。)“同时添加min StartDate和max StartDate”-这是什么意思?您希望结果是什么数据类型?看起来您可能正在尝试获取基于文本的结果,但min date值不是字符串…类似于2010年6月8日-2010年9月8日不确定您在这里试图实现什么,但我看到了一个问题min(md.StartDate)
将是DateTime
类型,而min(md.StartDate)+'-'+max(md.StartDate)
的减法将是TimeSpan
类型。我是否将min(md.StartDate)转换为stringRight?请在问题中澄清这一点。您不希望“使用MeetingDate的最小日期值”-您希望将最小日期值转换为字符串。您可能应该首先将该更改应用到LINQ中。。。以及告诉我们实际的问题是什么。(您已经向我们展示了一些LINQ,但没有描述它对您不起作用的方式。)谢谢您知道我为什么得到max/min不存在吗?简而言之,因为它不存在。在Linq中不是这样。事实上,我在Linq中找到了一篇可能有助于最小值和最大值的帖子,这样我就不会在“选择新模型”部分使用它。会议部分?谢谢你知道为什么我得到的最大值/最小值不存在吗?简而言之,因为它不存在。事实上,我在Linq中找到了一篇文章,这篇文章可能对Linq中的最小值和最大值有所帮助,这样我就不会把它放在“选择新型号”部分了?