2012-08-13 76 views
1

我有以下SQL query如何爲此SQL查詢編寫Lambda表達式?

Select cLedgerName,dDateFrom,cPeriodType,nPeriodFrom,nPeriodTo 
    from sys_Account_Ledger a,sys_Log_Deposits_Interest_Master b 
    where a.cGLCode=b.cGLCode and b.dDateFrom='08-11-2012' and b.cPeriodType='Days' 

我想寫這個使用Lambda expression。這query是我在哪裏卡住了。

public IList<ListViewData> GetDepositsListViewData(string glCode, string effectDate, string periodType) 
     { 
      using (var db = new DataClasses1DataContext()) 
      { 
       var data=db.sys_Account_Ledgers.Join(db.sys_Log_Deposits_Interest_Masters, 
        ledger=>ledger.cGLCode, 
        deposits=>deposits.cGLCode, 
        (ledger,deposits)=>new {db.sys_Account_Ledgers =ledger,db.sys_Log_Deposits_Interest_Masters =deposits}) 
      } 
     } 

我已經創建了一個class這將是我的查詢的返回類型。

這裏是class

public class ListViewData 
     { 
      public string LedgerName { get; set; } 
      public string DateFrom { get; set; } 
      public string PeriodType { get; set; } 
      public int PeriodFrom { get; set; } 
      public int PeriodTo { get; set; } 
     } 

誰能幫助我的lambda expression

回答

1
var result = dataContext.SysAccountLedger 
         .Join(dataContext.SysLogDepositsInterestMaster, 
          a => a.cGlCode, 
          b => b.cGlCode, 
          (a, b) => new ListViewData 
          { 
           LedgerName = a.LedgerName, 
           DateFrom = b.DateFrom, 
           PeriodType = b.PeriodType 
           // other properties 
          }) 
         .Where(item => item.DateFrom = Convert.ToDateTime("08-11-2012") && 
              item.PeriodType == "Days") 
         .ToList(); 
+0

感謝您的回答,我會嘗試一下,讓你知道。 – freebird 2012-08-13 06:48:48

+0

我試過了,但我只能得到LedgerName屬性,其他屬性都是空白的。 – freebird 2012-08-13 07:58:23

+0

@freebird,請嘗試使用SQL Server分析器查看發送到數據庫的查詢是什麼。接下來,檢查您是否擁有正確的屬性分配,並且確實返回的值不爲null或爲空。 – RePierre 2012-08-13 14:06:39

1
//Direct translation into Linq: 

    var query = from a in db.sys_Account_Ledger 
     join b in db.sys_Log_Deposits_Interest_Master on a.cGLCode equals b.cGLCode 
     where b.dDateFrom == Convert.ToDateTime("08-11-2012") && b.cPeriodType == "Days" 
     select new { a, b }; 

//Lambda of this: 

var query = db.sys_AccountLedger 
    .Join(db.sys_Log_Deposits_Interest_Master, 
     a => a.cGLCode, 
     b => b.cGLCode, 
     (a, b) => new {a , b}) 
    .Where(w => w.dDateFrom == Convert.ToDateTime("08-11-2012") && w.cPeriodType == "Days"); 
+0

感謝您的答覆,我會試試這個,讓你知道。 – freebird 2012-08-13 06:57:52

+0

我只能提取LedgerName屬性和其他屬性似乎是空白的。 – freebird 2012-08-13 07:59:22