我在嘗試使用LINQ調用字符串操作方法時遇到了令人沮喪的問題。我現在已經做了大量的搜索,並嘗試了各種方法來獲取下面標記爲'FAILS'的行。它目前引發異常。在linq-to-sql查詢中調用字符串操作方法的問題
有些事情我已經試過:
一)開始級聯關鍵的創造是在同一個查詢,沒有任何改變
二)非字符串字段轉換爲字符串(另一個完整的可以用.ToString不能在linq中工作的String.Concat和String.Format被嘗試過,在某些情況下工作正常,但是當您稍後嘗試引用該值時不會)
c)使用concat等等,而不是「+」把這些東西結合在一起。
正如您所看到的,它似乎相當寬容地將字符串附加到非字符串,但是當調用該方法時,而不是。
有很多行,所以我不想將數據轉換爲列表/數組等,但如果這是唯一的選擇,那麼任何建議表示讚賞。
非常感謝! - 標記
var vouchers = from v in db.Vouchers
select new
{
v.Amount,
v.Due_Date,
v.Invoice_Date,
v.PO_CC,
v.Vendor_No_,
v.Invoice_No_,
invoiceNumeric = MFUtil.StripNonNumeric(v.Invoice_No_)
};
var keyedvouchers = from vv in vouchers
select new
{
thekey = vv.Vendor_No_ + "Test", // works with normal string
thekey2 = vv.Amount + "Test", // works with decimal
thekey3 = vv.Invoice_Date + "Test", // works with date
thekey4 = vv.invoiceNumeric, // works
thekey5 = vv.invoiceNumeric + "Test" // FAILS
};
- 剝離字符的方法---
public static string StripNonNumeric(string str)
{
StringBuilder sb = new StringBuilder();
foreach (char c in str)
{
// only append if its withing the acceptable boundaries
// strip special chars: if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') | || (c >= 'a' && c <= 'z') | c == '.' || c == '_')
// strip any nonnumeric chars
if (c >= '0' && c <= '9')
{
sb.Append(c);
}
}
return sb.ToString();
}
- Message--
System.InvalidOperationException了由用戶代碼 消息未處理異常=無法(voucher).Select(v => new <> f__AnonymousType0 7(Amount = v.Amount, Due_Date = v.Due_Date, Invoice_Date = v.Invoice_Date, PO_CC = v.PO_CC, Vendor_No_ = v.Vendor_No_, Invoice_No_ = v.Invoice_No_, invoiceNumeric = StripNonNumeric(v.Invoice_No_))).Select(vv => new <>f__AnonymousType1
5(thekey =(vv.Vendor_No_ +「Test」),thekey2 =(Convert(vv.Amount)+「Test」),key3 = Convert(vv.Invoice_Date)+「Test」),key4 = vv.invoiceNumeric, thekey5 =(vv.invoiceNumeric +「Test」)))'到SQL中,並且不能將其視爲本地表達式。
非常好,謝謝你的建議,我會試試這個,並建議當我一天半回到這個數據庫附近時:) – Glinkot 2011-01-25 11:41:17