You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linq报错CS1579:无法遍历匿名类型变量求解决方向

问题分析与解决

你这里的问题核心很清晰:FirstOrDefault()返回的是单个匿名类型对象(要么是查询结果的第一条数据,要么是null),而foreach语句只能遍历实现了IEnumerable接口的集合类,单个对象没有GetEnumerator()方法,所以触发了CS1579错误。

下面分两种场景给出解决方案:


场景1:仅需获取第一条匹配的记录

直接移除foreach循环,直接访问单个对象的属性即可:

var results1 = (from p in db1.a_PCRs
            join je in db1.a_Job_Extensions on p.PCR equals je.PCR
            join j in db1.Jobs on je.Job equals j.Job1
            join d in db1.Deliveries on j.Job1 equals d.Job
            where j.Status == "Active"
            where j.Job1.StartsWith("A")
            where p.PCR == "2552"
            where d.Shipped_Quantity > 0
            orderby d.Shipped_Date descending
            select new
            {
                p.PCR,
                d.Shipped_Date
            }).FirstOrDefault();

if (results1 != null)
{
    lastDeliveryDate = results1.Shipped_Date;
}else
{
    lastDeliveryDate = Convert.ToDateTime("1/1/1980");
}

注:因为你已经按Shipped_Date倒序排序,第一条就是最新的发货日期,完全不需要遍历。


场景2:需要获取所有匹配的记录并遍历

把FirstOrDefault()替换为ToList()(或ToArray()),将查询结果转为集合类型,即可正常使用foreach:

var results1 = (from p in db1.a_PCRs
            join je in db1.a_Job_Extensions on p.PCR equals je.PCR
            join j in db1.Jobs on je.Job equals j.Job1
            join d in db1.Deliveries on j.Job1 equals d.Job
            where j.Status == "Active"
            where j.Job1.StartsWith("A")
            where p.PCR == "2552"
            where d.Shipped_Quantity > 0
            orderby d.Shipped_Date descending
            select new
            {
                p.PCR,
                d.Shipped_Date
            }).ToList();

if (results1.Any())
{
    foreach (var result1 in results1)
    {
        lastDeliveryDate = result1.Shipped_Date;
        // 注意:遍历多条记录时,lastDeliveryDate会被最后一条覆盖,按需调整逻辑
    }
}else
{
    lastDeliveryDate = Convert.ToDateTime("1/1/1980");
}

内容的提问来源于stack exchange,提问作者Bernie Hunt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:35:15