gpt4 book ai didi

asp.net - LINQ:多对多关系,从列表中选择

转载 作者:行者123 更新时间:2023-12-01 10:05:36 24 4
gpt4 key购买 nike

我无法弄清楚如何根据多对多关系中的列表进行选择。

我使用 Entity Framework 创建了以下实体和多对多关系(如果我做错了,请纠正我):

public class Foo {
public int FooID { get; set; }
public string FooName { get; set; }
public virtual ICollection<FooBar> Foo_Bar { get; set; }
}

public class Bar {
public int BarID { get; set; }
public string BarName { get; set; }
public virtual ICollection<FooBar> Foo_Bar { get; set; }
}

public class FooBar {
public int FooBarID{ get; set; }
public virtual int BarID { get; set; }
public virtual int FooID { get; set; }
}

在我的代码中,我的 Controller 将收到一个 Foo 列表,我需要找到所有带有这些 foo 的 Bar(only 和 any)

我真的不知道从哪里开始......这就是我想出的全部:

public PartialViewResult SearchAnyBar(List<Foo> foos) {
List<FooBar> foobars = _db.FooBar.Select(fb => fb).ToList<FooBar>();
List<Bar> searchedBars = new List<Bar>();

foreach (Foo f in foos)
{
foreach (FooBar fXb in foobars)
{
if (fXb.FooID == f.FooID)
{
searchedBars.Add(_db.Bar.Where(b => b.BarID == fXb.BarID).FirstOrDefault());
}
}
}

return PartialView("The View", searchBars);
}

这适用于抓取任何 Bar:

  1. 我非常肯定有更好的方法可以做到这一点,有没有一种方法可以根据列表进行选择而不是进行大约 2 个 foreach 循环?

  2. 我不确定如何获取 Foos 列表,其中 Foo 包含所有条形图,而不仅仅是任何条形图。

最佳答案

删除 FooBar 类。

只需创建一个 public virtual ICollection<Foo> Foos {get;set;}在你的酒吧课上

和一个public virtual ICollection<Bar> Bars {get;set;}在你的 Foo 类中

这将创建多对多关系(在您的数据库中使用名为 [Foo-Bar] 的关系表或类似的东西......但谁介意,您将使用对象)。

然后

任何查询:

var listOfFooId = <a list of Foo>.Select(m => m.FooId).ToList;
return _db.Bar.Where(m => m.Foos.Any(x => listOfFooId.Contains(x.FooId)));

不确定我是否理解“唯一”和“任何”,但如果您对其他查询有疑问...请问。

关于asp.net - LINQ:多对多关系,从列表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com