C# 在linq to sql查询中调用字符串操作方法时出现问题
我在尝试使用LINQ调用字符串操作方法时遇到了一个令人沮丧的问题。我现在已经做了很多搜索,并尝试了各种方法,以使下面标记为“失败”的行正常工作。它当前抛出一个异常 我尝试过的一些事情: a) 最初,连接键的创建在同一个查询中,没有任何更改 b) 将非字符串字段转换为字符串(另一整罐使用.ToString的工作在linq.string.Concat和string.Format中不起作用,在某些情况下可以正常工作,但在以后尝试引用该值时不行) c) 使用concat etc而不是“+”将事物连接在一起 正如您所看到的,似乎可以相当宽容地将字符串附加到非字符串,但在调用该方法时却不行 有很多行,所以我不想将数据转换为列表/数组等,但如果这是唯一的选择,那么任何建议都将受到赞赏 非常感谢标记C# 在linq to sql查询中调用字符串操作方法时出现问题,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我在尝试使用LINQ调用字符串操作方法时遇到了一个令人沮丧的问题。我现在已经做了很多搜索,并尝试了各种方法,以使下面标记为“失败”的行正常工作。它当前抛出一个异常 我尝试过的一些事情: a) 最初,连接键的创建在同一个查询中,没有任何更改 b) 将非字符串字段转换为字符串(另一整罐使用.ToString的工作在linq.string.Concat和string.Format中不起作用,在某些情况下可以正常工作,但在以后尝试引用该值时不行) c) 使用concat etc而不是“+”将事物连接在一
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
};
--去焦法---
公共静态字符串StripNonNumeric(字符串str)
{
StringBuilder sb=新的StringBuilder();
foreach(str中的字符c)
{
//仅当其包含可接受的边界时附加
//条带特殊字符:如果((c>='0'&&c='A'&&c='A'&&c='0'&&c它无法工作,因为它不应该工作
创建一个SQL端函数并在查询中调用它。这是因为它试图构建表达式的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_)
});
非常好,谢谢你的建议,我会在一天半后回到这个数据库附近时尝试并提出建议:)非常感谢,这就成功了。我无法像你所说的那样让第二个查询正常工作,但是通过分离ToList步骤,它工作起来很有魅力。谢谢你的帮助!谢谢你的提示david,一个简单的。ToList()在我的链子中间做了个小技巧。谢谢。我不擅长编写SQL函数,但谢谢你的想法。
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_)
});