我在尝试使用LINQ调用字符串操作方法时遇到了令人沮丧的问题。我现在已经做了很多搜索,并尝试了各种方法让下面标记为'FAILS'的行工作。它目前抛出异常。
我尝试过的一些事情:
a)最初,连锁密钥的创建在同一个查询中,没有改变任何内容
b)将非字符串字段转换为字符串(另外整个可以使用.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();
}
- 异常消息 -
System.InvalidOperationException未被用户代码处理
消息=无法翻译表达式'表(凭证)。选择(v =&gt; new&lt;&gt; 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”),key2 =(转换(vv。金额)+“测试”),键3 =(转换(vv.Invoice_Date)+“测试”),键4 = vv.invoiceNumeric,键5 =(vv.invoiceNumeric +“测试”)))'进入SQL并且无法对待它作为一个地方表达。
答案 0 :(得分:3)
这是因为它试图构建表达式的SQL查询,并且MFUtil.StripNonNumeric
无法转换为SQL。
首先尝试返回它,然后将reult转换为列表,然后使用第二个查询进行转换。
var vouchers_temp = from v in db.Vouchers
select new
{
v.Amount,
v.Due_Date,
v.Invoice_Date,
v.PO_CC,
v.Vendor_No_,
v.Invoice_No_
};
var vouchers = vouchers_temp.ToList().Select( new {
Amount,
Due_Date,
Invoice_Date,
PO_CC,
Vendor_No_,
Invoice_No_,
invoiceNumeric = MFUtil.StripNonNumeric(Invoice_No_)
});
答案 1 :(得分:0)
它无法工作,因为它不能起作用。
创建一个SQL端函数并在查询中调用它。