.Join()上的LINQ to SQL错误

本文关键字:to SQL 错误 LINQ 上的 Join | 更新日期: 2023-09-27 18:20:19

我试图查询一个数据库并连接两个表。我从未以这种方式使用过Join(),并且在第二个Join(()上出现错误:

var adjustments = data.Inventory_ARCHIVEs
    .Where(i => i.Location == comboBox3.Text && 
        upcCodes.Contains(i.UPCCode) && 
        (i.AVtime.Value.Date >= dateTimePicker1.Value.Date && 
            i.AVtime.Value.Date <= dateTimePicker1.Value.AddDays(1).Date) && 
        (i.BVtime.Value.Date >= dateTimePicker1.Value.Date && 
            i.BVtime.Value.Date <= dateTimePicker1.Value.AddDays(1).Date))
    .GroupBy(i => new { i.UPCCode })
    .Select(i => new
    {
        ID = i.Max(x => x.ID),
        i.Key.UPCCode
    })
    .Join(data.Inventory_ARCHIVEs, a => a.ID, 
        b => b.ID, (a, b) => new { a, b })
    .Join(data.BQItems, x => new { x.a.UPCCode, x.b.Location }, 
        y => new { y.UPC_Code, y.Location }, (x, y) => new
    {
        ID = x.a.ID,
        UPCCode = x.a.UPCCode,
        Date = x.b.BVtime.Value.Date,
        Description = y.Description,
        BVamount = x.b.BVamount,
        AVamount = x.b.AVamount,
        Difference = x.b.AVamount - x.b.BVamount,
        AverageCost = x.b.AverageCost,
        ExtCost = (x.b.AVamount - x.b.BVamount) * x.b.AverageCost
    });

x.a.UPCCodex.b.Locationy.UPC_Codey.Location是字符串。

这就是错误:

方法"System.Linq.Enumerable.Join<"的类型参数;TOuter,TInner,TKey,TResult>(System.Collections.Generic.IEnumerable<TOuter>,System.Collections.Generic.IEnnumerable<TInner>,System.Func<TOuter,TKey>,System.Func<请尝试显式指定类型参数。

如果我不包括按"Location"列联接,而只使用"UPCCode",它是有效的,但当我添加第二个按列联接时,我会得到错误

.Join()上的LINQ to SQL错误

我怀疑这就是问题所在-这至少是一个问题:

.Join(data.BQItems, x => new { x.a.UPCCode, x.b.Location }, 
                    y => new { y.UPC_Code, y.Location },
                    ...)

您正试图使用两个不同的匿名类型作为密钥类型来加入。它们具有不同的属性——一个具有UPCCode,另一个具有UPC_Code。你可能想要:

.Join(data.BQItems, x => new { x.a.UPCCode, x.b.Location },
                    y => new { UPCCode = y.UPC_Code, y.Location },
                    ...)

或者与属性名称更加一致,以便在任何地方都使用UPCCodeUPC_Code,而不是混合使用。

您必须最关心'equals'子句两边的数据类型,它们应该是相同的数据类型(如int和int,或string和string)。

或者使用lambda表达式,Join子句中的第二个和第三个参数必须是相同的数据类型。