2015-05-20 119 views
0

我使用實體LINQ實體LINQ where子句

請找我的LINQ查詢 -

Using lcntxRT60Entities As New RT60Entities(EntityConnection) 

      Dim lstrDocumentWhereClause As String 
      lstrDocumentWhereClause = astrDocumentWhereClause & " AND it.TransactionType = " + aintTransactionType.ToString + " AND it.VoidIndicator = 0" 
      lstrDocumentWhereClause = lstrDocumentWhereClause & " AND it.RtRouteDetails.RouteNumber = " + aintRouteNumber.ToString 

      If adatFromDate.ToString IsNot Nothing And adatToDate.ToString IsNot Nothing Then 
       adatToDate = adatToDate.AddHours(23).AddMinutes(59).AddSeconds(59) 
       lstrDocumentWhereClause = lstrDocumentWhereClause & " AND (it.TransactionDateTime BETWEEN DATETIME'" & Convert.ToDateTime(adatFromDate).ToString("yyyy-MM-dd HH:mm") & "' AND DATETIME'" & Convert.ToDateTime(adatToDate).ToString("yyyy-MM-dd HH:mm:ss") & "')" 
      End If 

      Dim Documents = From CTH In lcntxRT60Entities.RtCstTrnHeader.Where(lstrDocumentWhereClause) _ 
          Join C In lcntxRT60Entities.RtCustomer.Where(astrCustomerWhereClause) On CTH.RtCustomer.CustomerID Equals C.CustomerID _ 
          Select CTH, C _ 
          Order By CTH.RouteKey, CTH.VisitKey, CTH.TransactionKey 

      Dim DocumentDetails = From Document In Documents.ToList _ 
            Select Document.CTH 

      Return DocumentDetails.Skip(aintStartRow).Take(aintPageSize).ToList 

我有問題,我的where子句 -

lstrFilterCriteria = "it.DocumentPrefix + it.DocumentNumber LIKE '" & lstrValue.ToString().Trim() & "'" 

此擲轉換錯誤。

如果我用這個

lstrFilterCriteria = "it.DocumentPrefix+SqlFunctions.StringConvert((integer)it.DocumentNumber) LIKE '" & lstrValue.ToString().Trim() & "'" 

它扔語法錯誤。

如何轉換連接這兩列。 文檔前綴是字符串,文檔號是整數。 請建議。 Thnaks

+0

你似乎混淆了Linq/Lamba表達式的字符串? – DavidG

+0

@ DavidG-對不起,我沒有得到你,實際上我把where子句在哪裏串聯兩列。在sql中它會像select * from RtCstTrnHeader DocumentPrefix + CONVERT(nvarchar,DocumentNumber)like'as%' – Dilip

+0

首先,'StringConvert'不可用於'int'。它採用可爲空的雙精度或可爲空的小數。我不知道DocumentNumber的類型,如果它是一個int,則應該將它轉換爲雙精度或十進制。然後,我不確定使用'(integer)variableName'是投入vb的方式,是嗎? –

回答

0
Using lcntxRT60Entities As New RT60Entities(EntityConnection) 
Dim query=lcntxRT60Entities.RtCstTrnHeader 
    .Where(t=>t.TransactionType==aintTransactionType) 
    .Where(t=>t.VoidIndicator==0) 

If adatFromDate.ToString IsNot Nothing And adatToDate.ToString IsNot Nothing Then 
    adatToDate = adatToDate.AddHours(23).AddMinutes(59).AddSeconds(59) 
    query=query.Where(t=>t.TransactionDateTime>adatFromDate && t.TransactionDateTime<adatToDate); 
End If 

query=query 
    .OrderBy(t=>t.RouteKey) 
    .ThenBy(t=>t.Visitkey) 
    .ThenBy(t=>t.TransactionKey) 

Return query.Skip(aintStartRow).ToList 

你將不得不在自己的參數添加對任何astrDocumentWhereClause和你沒有在你的示例代碼爲它供給astrCustomerWhereClause可能在此之前包含。