-1
var result = (from p in productInQuery
      join o in orderInfoQuery on p.refNo equals o.refNo
      join x in productQuery on p.productNo equals x.no
      join t in productOutQuery on p.no equals t.productInNo into productIn
      from t in productIn.DefaultIfEmpty()
      //let dateOut = (from m in orderInfoQuery where m.refNo == t.refNo select m.delivered).FirstOrDefault()
      orderby o.processDate descending
      select new
      {     
          modelNo = x.modelNo,
          mfgNo = p.mfgNo,
          serialNo = p.serialNo,
          poNo = p.poNo,
          lbs = p.lbs,
          width = p.width,
          height = p.height,
          depth = p.depth,
          qty = p.qty,
          dateIn = o.processDate,
          dateOut = (DateTime?)(from m in orderInfoQuery where m.refNo == t.refNo select m.processDate).FirstOrDefault()
      }).ToArray();

我想将此结果添加到 iTextSharp 表格单元格中。

但我不知道该怎么做

我试过,

int resultSize = result.Length;

/*
for (int j = 0; j < resultSize; j++)
{
    table.AddCell(result[j]);
}
*/

foreach (string[] test in result) //Error : Unable to cast object of type 
{
    int testSize = test.Length;
    for (int j = 0; j < testSize; j++)
    {
        table.AddCell(test[j]);
    }
}

但我迷路了:(

有知道的请指教~

[编辑]

int resultSize = result.Length; //192

在此处输入图像描述

测试确实有一个字段...

[编辑 2]

实际上结果是从模型返回的。

PJ.WebUI.Models 报告类

public class Reports 
{
  public Array GetTransaction(){
    OrdersRepository ordersRepository = new OrdersRepository();
    var productInQuery = ordersRepository.ProductIn;
    var productOutQuery = ordersRepository.ProductOut;
    var productQuery = ordersRepository.Product;
    var orderInfoQuery = ordersRepository.OrderInfo;
    var result = (from p in productInQuery
      join o in orderInfoQuery on p.refNo equals o.refNo
      join x in productQuery on p.productNo equals x.no
      join t in productOutQuery on p.no equals t.productInNo into productIn
      from t in productIn.DefaultIfEmpty()
      //let dateOut = (from m in orderInfoQuery where m.refNo == t.refNo select m.delivered).FirstOrDefault()
      orderby o.processDate descending
      select new
      {     
          modelNo = x.modelNo,
          mfgNo = p.mfgNo,
          serialNo = p.serialNo,
          poNo = p.poNo,
          lbs = p.lbs,
          width = p.width,
          height = p.height,
          depth = p.depth,
          qty = p.qty,
          dateIn = o.processDate,
          dateOut = (DateTime?)(from m in orderInfoQuery where m.refNo == t.refNo select m.processDate).FirstOrDefault()
      }).ToArray();
    return result;
  }
}

并在控制器中调用方法来获取结果。

Reports reposrts = new Reports();
var result = reposrts.GetTransaction();

..

foreach (var test in result)
{
     table.AddCell(test.modelNo);
}

然后

Error   1   'object' does not contain a definition for 'modelNo' and no extension method 'modelNo' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

所以,

我将模型方法移动到控制器方法中(将所有方法放在同一方法中)并运行。然后它的工作原理!

但结果也可以在另一个控制器中使用。所以我想将结果保留在 Model 类中以供重用。

我想知道如果结果查询不在同一方法中,为什么它不起作用。

你能帮我多一点吗?

非常感谢你!

4

2 回答 2

3

'result' 将是您选择的匿名类型的数组,而不是字符串数组的数组,这就是您在 foreach 循环中遇到错误的原因。

您的循环可能看起来更像以下内容:

foreach (var test in result)  
{ 
    table.AddCell(test.modelNo);
    table.AddCell(test.mfgNo);
    table.AddCell(test.serialNo);
    // etc
} 

@编辑2:

因为 GetTransaction() 的结果是 'Array',调用方法不知道类型是什么,它只是将其视为一个对象数组,而且,因为它是一个匿名类型,所以不能(合理地)强制转换它回到预期的类型。

我认为在这种情况下你最好的选择是创建一个具有你想要返回的属性的新类,例如:

public class Transaction
{
    public string ModelNo { get; set; }
    public string MfgNo { get; set; }
    public string SerialNo { get; set; }
   // etc. - but with the correct types for the properties
}

然后更改 linq 查询以选择这种类型,而不是匿名类型,例如:

...
orderby o.processDate descending       
select new Transaction
{            
    ModelNo = x.modelNo,       
    MfgNo = p.mfgNo,       
    SerialNo = p.serialNo,
    // etc.
...

并将 GetTransaction() 的返回类型从 Array 更改为 Transaction[]。

于 2012-06-21T03:47:45.920 回答
0

目前尚不清楚您要做什么,但我相信您将结果的每个元素都错误地转换为字符串。

试试这个:

foreach (var test in result)

您可能需要调整您的内部代码,因为 test 不是数组,但这应该可以让您摆脱当前的错误。

于 2012-06-21T03:42:51.637 回答