从另一个表的外键获取记录列表

时间:2014-02-21 22:04:07

标签: c# asp.net entity-framework

我是实体框架的新手,我试图从另一个表的外键中获取实体模型。下面的代码是我知道如何获得模型列表,但我不希望模型具有fk1。我想要那些模型的外键参考模型。我知道我可以在获取列表并从那里访问外键后迭代这些模型,但是从实体中获取它们的正确方法是什么?

List<Entity.Models.myModel> myModels = context.myModels
  .Where(r => r.fk1 == fk1) 
  .ToList();

我想要的是myModels [i] .foreignKey2的列表。对不起,感到困惑。

2 个答案:

答案 0 :(得分:2)

也许你正在寻找这样的东西:

鉴于Order实体引用了ShippingTypeCustomer ...

public class Order
{
    public int OrderId { get; set; }
    public int ShippingTypeId { get; set; }
    public ShippingType ShippingType { get; set; }
    public int CustomerId { get; set; }
    public Customer Customer { get; set; }
}

...您要检索具有指定送货类型ID的订单的所有客户。然后查询可能如下所示:

List<Customer> customers = context.Orders
    .Where(o => o.ShippingTypeId == givenShippingTypeId) // your fk1
    .Select(o => o.Customer) // your foreignKey2 ???
    .Distinct() // To eliminate duplicate customers in the result
    .ToList();

答案 1 :(得分:0)

如果我理解你需要的是这个:

db.myModels.Include("myForeignModel").Where(r => r.name.contains("h")).toList

这将返回一个名称包含'h'的模型列表,所有这些模型将为eaxample加载一个foreing模型

public class Parent
{
    public int id {get; set;}
    public string name {get;set;}
    public int childId {get;set;
    public virtual child child {get;set;}
}

public class child
{
   public int id {get; set;}
   public string name {get;set;}

}

现在让我们假设你有一张父母的桌子和另一张儿童桌子

public dbset<parent> parents {get;set;}
public dbset<child> children {get;set;}

现在如果你想获得一个名为'john'的父母的第一个子名称,你会做这个查询

var db = new mycontext()

var parent = db.parents.include("child").Where(p => p.name == "john").FirstorDefault();

parent.child.name //this will show the child name for the parent called john