LINQ to SQL:如何实现LEAST或类似功能?

时间:2011-03-15 19:49:03

标签: c# linq-to-sql function

假设:

名为TABLE_1的表,其中包含以下列:

  • ID
  • ColumnA
  • ColumnB
  • ColumnC
  • ColumnD

我有SQL查询,其中TABLE_1基于ColumnA,ColumnB,ColumnC连接两次。查询可能如下所示:

Select t1.ID, t2.ID, t3.ID, LEAST(t1.ColumnD, t2.ColumnD, t3.ColumnD)
  From TABLE_1 t1
  Left Join TABLE_1 t2 On
       t1.ColumnA = t2.ColumnA
   And t1.ColumnB = t2.ColumnB
   And t1.ColumnC = t2.ColumnC
  Left Join TABLE_1 t3 On
       t2.ColumnA = t3.ColumnA
   And t2.ColumnB = t3.ColumnB
   And t2.ColumnC = t3.ColumnC

问题:

我需要在LINQ中重写Query。我试着去试一试:

var query =
    from t1 in myTABLE1List // List<TABLE_1>
    join t2 in myTABLE1List
      on new {t1.ColumnA, t1.ColumnB, t2.ColumnC}
  equals new {t2.ColumnA, t2.ColumnB, t2.ColumnC}
    join t3 in myTABLE1List
      on new {t2.ColumnA, t2.ColumnB, t2.ColumnC}
  equals new {t3.ColumnA, t3.ColumnB, t3.ColumnC}
  select new {
    ID_1 = s1.ID,
    ID_2 = s2.ID,
    ID_3 = s3.ID,
    // Invalid anonymous type member declarator.
    // Anonymous type members must be declared with a member assignment,
    // simple name or member access.
    // how can I implement this?
    least(s1.ColumnD, s2.ColumnD, s3.ColumnD)
  };

....

private object least(params object[] objects)
{
  // code here that sorts the objects and returns the 'smallest' of them.

  return leastObject;
}

如何在LINQ中编写查询?我究竟做错了什么?我认为可以在LINQ表达式中使用函数,为什么我会收到此错误?

2 个答案:

答案 0 :(得分:1)

怎么样?

MinOfColumnD = Math.Min(Math.Min(s1.ColumnD, s2.ColumnD), s3.ColumnD))

编辑:假设每个表中的ColumnD都是数字&amp; 'least`(在此上下文中)在给定列中至少有3个数字。

编辑:如果列是字符串,请确定最大值。它可以容纳的价值和在它上面做.Parse。 例如,

MinOfColumnD = Math.Min(Math.Min(int.Parse(s1.ColumnD), int.Parse(s2.ColumnD)), int.Parse(s3.ColumnD)))

答案 1 :(得分:1)

我可能错了,但我认为你需要将least的结果分配给新匿名类型实例的实际成员,例如:

select new {
    ID_1 = s1.ID,
    ID_2 = s2.ID,
    ID_3 = s3.ID,
    Least = least(s1.ColumnD, s2.ColumnD, s3.ColumnD)
};