我收到以下错误:
LINQ中仅支持无参数构造函数和初始值设定项 实体。
我正在尝试从结果集中查询数据,而新结果集的一部分会返回一个新的日期字段。
var result = debts.Select(x => new
{
x.Snowball.User.Email,
x.SnowballID,
x.Description,
x.ID,
x.DueDayOfMonth,
Due = new DateTime(ExecutionDate.Year,
ExecutionDate.Month,
x.DueDayOfMonth)
}).ToList();
有没有办法可以创建这个推断的日期时间?
答案 0 :(得分:2)
LINQ to Entities有查询的边界。
如果您愿意,IQueryable结果可以逐步添加一个或多个过滤器和选择等。
当查询被添加到什么时候已经命中了数据库;只有当您访问结果集时,查询才会由LINQ提供程序构建(例如,单个Transact SQL查询),然后在数据库上运行,并返回其结果。
如果您已经显示,您正在尝试在数据库的结果集中创建一个新对象(Date
- 但也可能是您自己的类之一。
因此,对于从数据库查询返回的每一行,您尝试从对象(来自您的代码库)创建一个不同的行(需要将参数传递给构造函数)。 由于底层提供程序无法保证能够动态地从外部源创建任意对象,因此不允许这样做(LINQ提供程序阻止)。
将针对数据库运行的查询是' debts
'。这将返回未经过滤的查询中的所有行(因为没有WHERE
子句)。
下一个查询将在您的代码中运行。在您的代码中,可以使用参数化构造函数 - 现在是LINQ To Objects。
因此,区分查询的各个阶段并执行您想要执行的操作的方法是将ToList()
放在针对数据库运行的查询的末尾,以便生成查询,运行,结果返回。
然后在这些结果上构建并运行下一个查询(在代码中)。
var result = debts.ToList().Select(x => new
{
x.Snowball.User.Email,
x.SnowballID,
x.Description,
x.ID,
x.DueDayOfMonth,
Due = new DateTime(ExecutionDate.Year, ExecutionDate.Month, x.DueDayOfMonth)
});
答案 1 :(得分:0)
您可以使用无参数构造函数创建自己的Date类,并使用属性初始化器语法设置它,如
Due = new Date(){Year = ExecutionDate.Year, Month = ExecutionDate.Month, Day = x.DueDayOfMonth}
然后只需定义从Date到DateTime的转换。
答案 2 :(得分:0)
你可以试试这个:
<?php
foreach ($tema_s as $item):
$query_string = urlencode($item['pltfrm']. '=' .$item['notid']);
$title = htmlspecialchars($item['ttl']);
$src = urlencode($item['pic1']);
$alt = htmlspecialchars($item['rlcn']);
$date = ucfirst(strftime("%A %e de %B del %Y", date(strtotime($item['fch']))));
?>
<article class="notxtras">
<a class="notxtras_url_cntn" href="cdn.php?<?= $query_string ?>" title="<?= $title ?>">
<div class="notxtras_img_cntn">
<img src="http://cadenanoticias.mx/img/miniatura/"<?= $src ?>" alt="<?= $alt ?>">
</div>
<h1 class="notxtras_ttl_cntn"><?= $title ?></h1>
<p class="notxtras_brv_cntn"><?= htmlspecialchars($item['brv']) ?></p>
<p class="notxtras_dsp_cntn">
Por: "<?= htmlspecialchars($item['aut']) ?>
• <?= htmlspecialchars($item['cdd']) ?>
• <?= $date ?>
</p>
</a>
</article>";
<?php endforeach; ?>
答案 3 :(得分:0)
我来到这里寻找同样的事情,但是在进一步的研究中发现了在System.Data.Entity中使用DbFunctions.CreateDateTime的另一种方法。使用此方法,您的查询将如下所示:
var result = debts.Select(x => new
{
x.Snowball.User.Email,
x.SnowballID,
x.Description,
x.ID,
x.DueDayOfMonth,
Due = DbFunctions.CreateDateTime(ExecutionDate.Year,
ExecutionDate.Month,
x.DueDayOfMonth, 0,0,0)
}).ToList();
编辑:这适用于EF6及更高版本,对于早期版本的EF,使用System.Data.Entity.Core.Objects.EntityFunctions而不是DbFunctions