2012-05-04 241 views
0

我想連接一個字符串,使用lambda比較某個條件下的連接值。Linq to entities - lambda - 連接字符串

Invoices = Invoices.Where(f => ((string)f.invoice_prefix + String.Format("{0:0000}", Convert.ToInt32(f.invoice_number))).ToLower().Equals(condition7)); 

但我得到一個錯誤信息:

名稱 'F' 並不在當前的背景下

試了的String.Format存在,String.Concat像

變種
Invoices = Invoices.Where(f => (String.Format("{0}{1}",f.invoice_prefix,String.Format("{0:0000}", Convert.ToInt32(f.invoice_number)))).ToLower().Equals(condition7)); 

但沒有成功...有人可以幫我的語法嗎?

在此先感謝!

+0

什麼是「發票」? – Dave

+0

IQueryable 發票 – tortuga

回答

2

Linq to Entities不理解所有的.NET框架方法。

爲了將其作爲數據庫上的SQL語句運行,只需要使用可以轉換爲SQL的運算符。這意味着您需要使用原始數據類型重新編寫謂詞。

因此,像這樣:

string prefixCondition = ... 
int invoiceNumberCondition = ... 

Invoices.Where(f => 
    f.invoice_prefix == prefixCondition 
    && 
    f.invoice_number == invoiceNumberCondition 
) 

我建議使用LinqPad來測試,因爲它顯示了你生成的SQL語句。

+0

問題被標記爲關於實體框架而不是linq to sql,但同樣的考慮將適用。 – AakashM

+0

@AakashM我給Linq寫了實體。有人將它編輯到Linq to SQL - 我不知道爲什麼。我已經恢復了編輯。 –

+0

小字符串與前綴條件爭執,因爲前綴可以改變,但它的工作。 TNX! – tortuga