Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在linq to sql查询中调用字符串操作方法时出现问题_C#_Linq_Linq To Sql - Fatal编程技术网

C# 在linq to sql查询中调用字符串操作方法时出现问题

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而不是“+”将事物连接在一

我在尝试使用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_)
});