.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.UPCCode
、x.b.Location
、y.UPC_Code
和y.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(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 },
...)
或者与属性名称更加一致,以便在任何地方都使用UPCCode
或UPC_Code
,而不是混合使用。
您必须最关心'equals'子句两边的数据类型,它们应该是相同的数据类型(如int和int,或string和string)。
或者使用lambda表达式,Join子句中的第二个和第三个参数必须是相同的数据类型。