2

您好我的代码如下:

 List<COSIS_DAL.PaymentsHeader> pheadr = c.GetPaymentHeaderByPayDate(PayDate);

 public List<PaymentsHeader> GetPaymentHeaderByPayDate(DateTime payDate)
    {
        CosisEntities db = new CosisEntities();

        IQueryable<PaymentsHeader> query = (from p in db.PaymentsHeaders
                    where p.PaymentDate.Value.Day == payDate.Day
                    && p.PaymentDate.Value.Month == payDate.Month
                    && p.PaymentDate.Value.Year == payDate.Year
                    select p);

        return query.ToList();

    }

所以我想将数据从 pheadr 保存到这样的字符串:

     string keyword = Convert.ToString(pheadr.Select(m => m.VoucherNumber));

但我没有得到列表中的值。而不是我得到的价值:

      System.Linq.Enumerable+WhereSelectListIterator`2[COSIS_DAL.PaymentsHeader,System.String]

请帮助我。我真的很麻烦。提前致谢。

4

4 回答 4

4

问题是这pheadr.Select(m => m.VoucherNumber)不是一个单一的价值......它是价值的集合......你可以尝试:

string keyword = string.Join(", ", pheadr.Select(m => Convert.ToString(m.VoucherNumber)));

如果您真的想要多个由,.

或者你可以把它放在一个单独的集合中:

List<string> vouchers = pheadr.Select(m => Convert.ToString(m.VoucherNumber)).ToList();
于 2013-08-30T10:02:58.333 回答
2

也许是这样的:

var keywords = pheadr.Select(x=>x.VoucherNumber.ToString()).ToList();

它将选择所有凭证编号以列出字符串。是你想要的吗?keywordsList<string>

您得到的字符串是因为您将 Linq 表达式转换为字符串,而不是内部字段。

仅对于第一条记录,请使用:

var keyword = Convert.ToString(pheadr.First().VoucherNumber);

如果您不确定它是否总是返回一个值,请尝试:

var ph = pheadr.FirstOrDefault();
var keyword = ph!=null?Convert.ToString(ph.VoucherNumber):"";

编辑:正如@xanatos 建议的那样,我Convert改用了ToString

于 2013-08-30T10:01:35.583 回答
2

因为pheadrPaymentsHeader对象的集合,所以这条线

pheadr.Select(m => m.VoucherNumber)

将选择每个PaymentsHeader VoucherNumber属性,我假设它是一个字符串。因此,将返回的内容将是字符串的集合。你可以循环遍历它,你可以把它转换成一个列表或数组,或者你可以把它放在炖菜里,但你不能只调用.ToString它。这会调用默认object.ToString行为,即转储类的名称,这就是你得到的。

例如,如果要提取这些字符串的逗号分隔列表,可以使用:

string.Join(",", pheadr.Select(m => m.VoucherNumber))
于 2013-08-30T10:04:33.620 回答
1

尝试这个

string keyword ;
if(pheader != null)
   keyword = pheader.FirstOrDefault().VoucherNumber;
else
   keyword = "";  
于 2013-08-30T10:05:58.977 回答