使用ef核心在单查询中插入选择

时间:2020-06-09 22:59:40

标签: c# .net-core linq-to-sql ef-core-3.0 insert-select

如何在.net core3.0中使用ef core 3.0将插入选择为单个查询?

我有一个要求,其中插入时一列的值由先前插入的值确定。在下面的示例中,我们通过查看相似组的上一个条目来确定对象的处理时间,如果有任何条目,则添加5秒。然后,我们要将当前时间的最大值和计算出的时间分配给object.processOn。

查询内容如下:

if

如果随后的插入延迟大约超过300毫秒,则此方法效果很好。但是,如果延迟小于300毫秒,则无法获取先前的值。

这是现在的样子:

to_ten = [*range(1, 11)]  # a list containing the numbers from 1-10

for number in to_ten:
    print("{} is {}".format(number, ['even', 'odd'][number % 2]))

这是所需的输出:

var time = (from t in db.Model
            where t.groupNo == object.groupNo
            orderby t.processOn descending
            select t.processOn).FirstOrDefault().AddSeconds(5);
object.processOn = DateTime.UtcNow > time ? DateTime.UtcNow : time;
db.Model.Add(object);

我也尝试在一个命令中做到这一点:

Id  GroupNo  ProcessOn
1   1        2020-06-09 22:42:22.080
2   1        2020-06-09 22:42:22.080
3   1        2020-06-09 22:42:22.080
4   1        2020-06-09 22:42:27.080

但是,这也不起作用,代码开始显得凌乱且未经优化。 在分析了ef core生成的sql查询之后,很明显,在两种情况下,它都运行两个不同的查询而不是一个插入选择查询,并且它可以解释问题。

还有其他方法可以实现或优化它吗?

0 个答案:

没有答案