1

そのため、スクリプト タスク内のテーブルから最新のレコードを取得しようとしていました。次のようなLinqクエリでエラーが発生しています。

"Could not Translate expression 'Table(SSASLogging).Select(r=>r.TimeStamp).Max()' into SQL and could not treat it as a local expression."

問題は DateTime データ型にありますが、SSIS 変数に渡すには DateTime が必要です。これはSQL実行タスクで簡単に実行できることはわかっていますが、今すぐあきらめるにはあまりにも先に進んでいます! DateTime用のLinqToSQLメソッドがいくつかあることは知っていますが、それらは比較用であり、ここでそれらを適用する方法がわかりません。

    public DateTime getLatest()
    {
        DateTime result = new DateTime();

        //temp dummy/defaul date is two days ago
        result = DateTime.Now.AddDays(-2);

        try
        {
            //get the data connection string from the connection manager
            RW = (string)Dts.Connections["ReportingWarehouse"].ConnectionString;

            //Remove the Provider, Auto Translate, and Application
            //as it is not a parameter for the DataContext constructor
            RW = RW.Remove(RW.IndexOf("Provider=SQLNCLI10.1;"), "Provider=SQLNCLI10.1;".Length);
            RW = RW.Remove(RW.IndexOf("Auto Translate=False;"), "Provider=SQLNCLI10.1;".Length);
            RW = RW.Remove(RW.IndexOf("Application"),RW.Length - RW.IndexOf("Application"));



            MessageBox.Show(RW);

            //get the last insertion date from the SSASLoging table
            using (DataContext RWData = new DataContext(RW))
            {
                Table<SSASLogging> records = RWData.GetTable<SSASLogging>();
                var rs = (from r in records
                         select r.TimeStamp).Max();
                //result = rs.FirstOrDefault();
            }

        }

        catch (Exception e)
        {
            MessageBox.Show("Exception in Retrieving latesttime" + e.Message + "/n"
                            + e.StackTrace);
        }

        return result;
   }

}//end partial class


[Table]  
public class SSASLogging  
{
    [Column(Name = "CREATED_TIMESTAMP")] 
    private DateTime timeStamp;

    public DateTime TimeStamp 
    {
        get { return this.TimeStamp; }
    }
}//End SSASLogging
4

4 に答える 4

2

うまくいかない場合Maxは、次のようにします。

var maxDate =
    (from r in records
     orderby r.TimeStamp descending
     select r.TimeStamp)
    .FirstOrDefault();
于 2013-03-15T07:07:29.270 に答える
1

OrderByを試すことができます

var rs = (from r in records  orderby r.TimeStamp descending
                     select r).FirstOrDefault();
于 2013-03-15T07:08:33.420 に答える
1

テーブルと を並べ替えてみてくださいTake(1).ToList()List0 または 1 要素で返される必要があります。次にFirstOrDefault、SQL ではなくアプリケーションによって実行される を使用できます。

var rs = (from r in records
          orderby r.TimeStamp descending
          select r).Take(1).ToList().FirstOrDefault();
于 2013-03-15T07:26:04.287 に答える
0

これが原因である可能性があります:

http://msdn.microsoft.com/en-us/vstudio/ff963710.aspx

それで:

var rs = (from r in records.AsEnumerable()
         select r.TimeStamp).Max();

また:

var rs = (from r in records
         select r.TimeStamp).AsEnumerable().Max();
于 2013-03-15T07:48:11.353 に答える