Linq:数据表到列表.演员的问题

本文关键字:问题 列表 数据表 Linq | 更新日期: 2023-09-27 18:11:16

我得到了Specified cast is not valid.,我找不到原因。这是我的代码。

对象层。

public class Supervisor
{
    public long ID { get; set; }
    public string stringField1 { get; set; }
    public string stringField2 { get; set; }
    public string stringField3 { get; set; }
    public int intField1{ get; set; }        
    public int intField2 { get; set; }
}

c#方法。

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string GetPend(string value1FromjqGrid, string value2FromjqGrid)
    {
        string query = "GetPend";
        string supervisor = "";
        Supervision _query = new Supervision();             
        DataTable dt = _query.GetSupervisorQuery(value1FromjqGrid, value2FromjqGrid, supervisor, query );
        List<Supervisor> lines = (from dt1 in dt.AsEnumerable()
                               select new Supervisor()
                               { 
                                   ID = dt1.Field<long>("ID"),                                                                              
                                   stringField1 = dt1.Field<string>("Linea"),
                                   intField1 = dt1.Field<int>("Tiempo"),
                                   intField2 = dt1.Field<int>("TIPOACTIVIDAD_ID"),
                                   stringField2 = dt1.Field<string>("ACT_ID"),
                                   stringField3 = dt1.Field<string>("OBS")
                               }).ToList();
        var grid = new
        {
            page = 1,
            records = lines.Count(),
            total = lines.Count(),
            rows = from item in lines
                   select new
                   {
                       id = item.ID,
                       cell = new string[]{                               
                           item.stringField1,
                           item.intField1.ToString(),
                           item.intField2.ToString(),
                           item.stringField2,
                           item.stringField3
                       }
                   }
        };
        return JsonConvert.SerializeObject(grid); 
    }   

差不多就是这样。当LinQ迭代开始时,它崩溃了。DataTable是正确填写的,因为我已经检查过了,dt1包含正确的字段。我看到""的字符串列和int's的数字(我自己做了SQL存储过程,所以我也做了检查。)有了这个,我也保证jqGrid的2个参数是OK的,但我仍然在调用之前放置了一些警报,是的,它们很好。

我已经粘贴了代码,它似乎是相关的,因为当代码试图解析从DataTableList的信息时,错误来了,如果你需要检查这里涉及的javascript只是让我知道,但我不认为这是需要的。很明显我没看到什么希望你能指引我正确的方向。谢谢。

p。我试过在LINQPad4检查它,但我不能给它一个尝试,因为我不知道如何表示原始的DataTable变量那里。

这是当我展开错误时VS给我的结果:

   at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
   at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
   at WEB.Supervisor.<GetPend>b__b(DataRow dt1) in       E:'Dev'VS'WEB'Supervisor.aspx.cs:line 110
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at WEB.Supervisor.GetPend(String value1FromjqGrid, String value2FromjqGrid) in E:'Dev'VS'WEB'Supervisor.aspx.cs:line 109

第109和110行是

List<Supervisor> lines = (from dt1 in dt.AsEnumerable()
                           select new Supervisor()

在转换过程开始时崩溃。

更新2

根据注释,我做了如下操作。

SELECT转换为SELECT INTO以生成垃圾表。然后检查了它的设计,让我吃惊的是,字段CAST(ACT_ID AS NVARCHAR(50))仍然是十进制的,而不是我期望的nvarchar。

所以,似乎我必须在LinQ中将其处理为小数,或者我可以做其他事情吗?我过去曾尝试使用decimals,但没有成功。

Linq:数据表到列表.演员的问题

数据库中的列类型与List<Supervisor> lines = (from dt1 in dt.AsEnumerable() select new Supervisor() {...}).ToList();中使用的数据类型不匹配

在注释中进行一些对话后,我们可以看到"ACT_ID"的类型在database中是十进制的。因此,要解决异常问题,可以执行以下操作:

List<Supervisor> lines = (from dt1 in dt.AsEnumerable()
                          select new Supervisor {
                              ID = dt1.Field<long>("ID"),
                              stringField1 = dt1.Field<string>("Linea"),
                              intField1 = dt1.Field<int>("Tiempo"),
                              intField2 = dt1.Field<int>("TIPOACTIVIDAD_ID"),
                              stringField2 = dt1.Field<decimal>("ACT_ID").ToString(),
                              stringField3 = dt1.Field<string>("OBS")
                          }).ToList();