【发布时间】:2020-02-12 11:01:21
【问题描述】:
在我的设置中,我有以下查询。
类:
public class NewsList
{
public Guid NewsGuid { get; set; }
public string Heading { get; set; }
public string FileName { get; set; }
}
控制器:
List<NewsList> newsList = (from n in db.News
join ni in db.NewsImages
on n.NewsGuid equals ni.NewsGuid
where (ni.FileOrder == 10 || ni.FileName == null) && n.NewsDate.Year == newsDate.Year && n.NewsDate.Month == newsDate.Month && n.NewsDate.Day == newsDate.Day
orderby n.NewsDate descending
select new NewsList
{
NewsGuid = n.NewsGuid,
Heading = n.Heading,
FileName = ni.FileName
}).Take(10).ToList<NewsList>();
我有两个问题。
1) 我在这里加入两个表,分别是 News 和 NewsImages 及其 1-N 关系。一条新闻可以没有任何内容,只有一张或多张图片。 通过这种加入,即使我指定 ni.FileName 可以为空,我也不会得到没有图像的新闻。它只返回 News,它在 NewsImages 表中至少有一条记录。 我只想要一个常规类型的 LEFT JOIN 这里。我如何做到这一点?
2) 带有 WHERE 语句的行看起来很糟糕,我需要分别检查年、月和日。 NewsDate 是数据库上的 DateTime 字段,newsDate 是仅日期格式 (yyyy-MM-dd)。我只想从特定日期(查询字符串)中选择所有新闻。
如果没有 EF,我可以像这样使用标准 T-SQL 实现这一点:
CAST(NewsDate AS date)='" + newsDate + "'"
如何更好地清理 WHERE 线?
【问题讨论】:
-
n.NewsDate.Date == newsDate.Date在 where 子句中是否适合您的需要? -
@JDDavis 我试过了。它确实引发了错误“LINQ to Entities 中不支持指定类型成员 'Date'。仅支持初始化程序、实体成员和实体导航属性。”
-
这是什么版本的EF?核心还是 6?
-
其带有 EF 6 的普通 ASP.NET MVC 项目。运行时版本:v4.0.30319 和版本 6.0.0.0
标签: c# asp.net-mvc entity-framework