将联接添加到现有 LINQ 查询
本文关键字:LINQ 查询 添加 | 更新日期: 2023-09-27 18:34:24
我得到了这个堆栈溢出问题的帮助。
现在我正在构建查询,需要向其他表添加联接以引入名称和描述等。
我的查询是这样的:
using (var ctx = new myEntities())
{
var pc = ctx.tblPostcodes.Where(z => z.Postcode == postcodeOutward)
.Select(x => new {postcodeId = x.PostcodeID}).Single();
int pcId = pc.postcodeId;
var q = ctx.tblPrices.OrderByDescending(x => x.Cost)
.Where(c => c.PostcodeID == pcId)
.Where(s => s.ItemID < 18)
.GroupBy(x => x.ItemID)
.Select(g => new { g, count = g.Count() })
.ToList()
.SelectMany(t => t.g.Select(b => b).Zip(Enumerable.Range(1, t.count), (j, i) => new { j.ItemID, j.Cost, j.SupplierID }));
foreach (var i in q)
{
sb.AppendFormat("ItemId = {0}, Cost = {1}, SupplierId = {2}<hr/>", i.ItemID, i.Cost, i.SupplierID);
}
}
我正在尝试添加以下连接:
.Join(ctx.tblItems, it => it.ItemID, s => s.ItemID, (it, s) => new { it, s })
但它会导致不明确的调用错误。有什么想法吗?我将需要再添加两个内部连接。我希望做对一个,另外两个会很容易(希望如此)。
如果先使用数据库,EF 会为你生成导航属性,因此你不必加入。
如果希望能够在查询之外获取此信息,请使用 .包含("导航属性名称")命令以添加"联接",这将导致将相应的对象或对象列表添加到查询结果中。
var q = ctx.tblPrices.Include("tblItems").OrderByDescending(x => x.Cost)
最好查看 EF 模型以了解该属性的名称...
试试这个,我不知道它是否会在第一次尝试中起作用,但这是一个很好的起点!
using (var ctx = new myEntities())
{
var pc = ctx.tblPostcodes
.First(x => x.Postcode == postcodeOutward)
.Select(x => new { postcodeId = x.PostcodeID });
var prices = ctx.tblPrices
.Where(x => x.PostcodeID == pc.postcodeId)
.OrderByDescending(x => x.Cost)
.ToList();
var items = ctx.tblItems
.Where(y => y.ItemID < 18)
.GroupBy(y => y.ItemID)
.Select(y => new { y, count = y.Count() })
.ToList();
// Join
var q = prices
.Join(items,
pr => pr.ItemID,
it => it.ItemID,
(pr, it) => new
{
pr.ItemID,
pr.Cost,
pr.SupplierID
})
.ToList();
q.Select(x => sb.AppendFormat("ItemId = {0}, Cost = {1}, SupplierId = {2}<hr/>",
x.ItemID, x.Cost, x.SupplierID));
}