Gre*_*g B 3 linq asp.net entity-framework asp.net-mvc-3
我无法确定如何根据多对多关系中的列表进行选择.
我用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; }
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我的控制器将收到一个Foo列表,我需要找到所有带有那些foo的Bar(只有和任何一个)
我真的不知道从哪里开始...这就是我想出来的全部内容:
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);
}
Run Code Online (Sandbox Code Playgroud)
这适用于抓住任何Bar但是:
我非常肯定有一种更好的方法可以做到这一点,是否有一种方法可以根据列表进行选择而不是进行2次foreach循环?
我不知道如何获得一个Foo列表,其中Foo拥有所有的条形而不仅仅是任何条形图.
删除FooBar类.
只需public virtual ICollection<Foo> Foos {get;set;}在Bar类中创建一个
和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)));
Run Code Online (Sandbox Code Playgroud)
不确定我理解"唯一"和"任何",但如果你有其他查询的问题...问.
| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |