将SQL转换为LINQ或改进我的查询

时间:2019-04-04 13:00:43

标签: c# linq lambda

我正在尝试将sql转换为lambda或LINQ,但还不能简化,

我设法为它做两个不同的lambda,但我希望它是一个查询。

SQL查询是这样

  SELECT PamID, MAX (MaxAmount)
    FROM RebateTable
GROUP BY PamID

到目前为止,这是可行的,但是还有什么更好的方法。

var t = from r in RebateList
    group r by r.PamID;
var x = from y in t
    select new RebateMaxClass
    {
        PamId = y.Key,
        TotalSale = y.Max(s => s.MaxAmount)
    };

2 个答案:

答案 0 :(得分:4)

您可以使用以下形式:

import tensorflow as tf

c = []
for i, d in enumerate(['/gpu:0', '/gpu:1', '/gpu:2']):
    with tf.device(d):
        a = tf.get_variable(f"a_{i}", [2, 3], initializer=tf.random_uniform_initializer(-1, 1))
        b = tf.get_variable(f"b_{i}", [3, 2], initializer=tf.random_uniform_initializer(-1, 1))
        c.append(tf.matmul(a, b))

with tf.device('/cpu:0'):
    sum = tf.add_n(c)

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

init = tf.global_variables_initializer()
sess.run(init)

print(sess.run(sum))
# [[-0.36499196 -0.07454088]
# [-0.33966339  0.30250686]]

答案 1 :(得分:2)

查询看起来不错。您可以像这样形成一个查询:

var t = from r in RebateList
        group r by r.PamId into y
        select new
        {
            PamId = y.Key,
            TotalSale = y.Max(s => s.MaxAmount)
        };

但这并不快。查询已扩展,将一直执行直到必须执行。

一种替代方法是形成“新的LinQ样式”:

var t2 = RebateList.GroupBy(g => g.PamId) // Do a Grouping
var t3 = t2.Select(s => new { PamId = s.Key, TotalSale = s.Max(m => m.MaxAmount) });