检索其他列值时LINQ错误无效列

时间:2012-11-15 15:21:26

标签: c# sql-server linq exception

我有以下LINQ查询。

    // Query the database
    IEnumerable<BestSeller> best_sellers = from bs in (db.smd_group)
                                           where bs.COMPANY == "SMD Textiles"
                                           where bs.DOCDATE > six_months_back
                                           where bs.CUSREF == customer.customer_ref
                                           group bs by bs.PRODCODE into g
                                           orderby g.Sum(x => x.MQTY) descending
                                           select new BestSeller()
                                           {
                                               product_code = g.Key.Trim(),
                                               total_quantity = Convert.ToString(g.Sum(x => x.MQTY)),
                                               // ERROR Occurs when the following line is removed
                                               //product_description = g.First().prd_prddes
                                           };

    // Get the top 25 products
    top25 = best_sellers.Take(25);

正如您所看到的,我已经注释掉了创建BestSeller个对象的行。

我希望在product_description对象中设置BestSeller。所以我在下面添加了一行:

product_description = g.First().prd_prddes

“prd_prddes”是保存我们产品说明的列的名称。

然而,只要我将此行添加到我的查询中,我就会收到一个奇怪的错误:

  

无效的列名称'PRODCODE'。

     

无效的列名称'PRODCODE'。

     

无效的列名称'PRODCODE'。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.Data.SqlClient.SqlException:无效列   名称'PRODCODE'。列名称“PRODCODE”无效。列名无效   'PRODCODE'。

列名PRODCODE显然不是无效的,因为如果删除product_description行,它就可以正常工作。

这非常特别......

2 个答案:

答案 0 :(得分:2)

看起来g中的任何内容都没有名为'PRODCODE'的列

就我个人而言,我只会在你的select语句中选择g,然后我会制定一个断点并使用调试器查看其中的内容。

答案 1 :(得分:0)

您是否检查过所有PRODCODE结果是否有效?听起来好像是一个空或空。这意味着你仍然可以按它分组,但是一旦你尝试选择它就会抛出那个错误。

试试这个:

product_description = g.FirstOrDefault() == null 
    ? g.FirstOrDefault().prd_prddes  
    : "Empty";

如果第一个项目为null,它将回退并显示“Empty”。我不确定第一项是否为空,所以它可能不起作用......