代码之家  ›  专栏  ›  技术社区  ›  Elijah Manor

LINQ到SQL表依赖项

  •  3
  • Elijah Manor  · 技术社区  · 17 年前

    如果我有两张桌子…类别和宠物。

    linq-to-sql中是否有一种方法可以将联接查询的结果映射到另一个强类型类(如:petwitCategoryName),以便我可以将其强传递给MVC视图?

    我现在有类别和宠物课程…我要再做一个吗?

    也许我在这里错过了什么。你们中有人能启发我吗?

    from p in petTable
    join c in categoryTable on p.CategoryId equals c.Id
    where (c.Id == categoryId.Value)
    select new
    {
        p.Id, 
        p.Name,
        p.Description,
        p.Price,
        CategoryName = c.Name
    }
    
    <?xml version="1.0" encoding="utf-8" ?>
    <Database Name="PetShop" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
      <Table Name="Category" Member="PetShop.Models.Category">
        <Type Name="PetShop.Models.Category">
          <Column Name="Id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" />
          <Column Name="Name" Member="Name" />
          <Column Name="Description" Member="Description" />
        </Type>
      </Table>
      <Table Name="Pet" Member="PetShop.Models.Pet">
        <Type Name="PetShop.Models.Pet">
          <Column Name="Id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" />
          <Column Name="Name" Member="Name" />
          <Column Name="Description" Member="Description" />
          <Column Name="ImageUrl" Member="ImageUrl" />
          <Column Name="Price" Member="Price" />
          <Column Name="CategoryId" Member="CategoryId" />
          <Association Name="FK_Pet_Category" Member="Category" ThisKey="CategoryId" OtherKey="Id" IsForeignKey="true" />
        </Type>
      </Table>
    </Database>
    
    2 回复  |  直到 17 年前
        1
  •  4
  •   Giovanni Galbo    17 年前

    我该如何使用LoadWith?我在网上找不到什么帮助。有什么好资源吗?

    我在网上找到这个: http://blogs.msdn.com/wriju/archive/2007/10/04/linq-to-sql-change-in-datacontext-from-beta-1-to-beta-2.aspx

    您可以执行以下操作:

    var loadOption = new DataLoadOptions();           
    loadOption.LoadWith<Pets>(p => p.Category);
    db.LoadOptions = loadOption; 
    
    var pets = from p in PetStoreContext.Pets
               select p;
    

    然后您的pets查询将已经包含category,因此当您尝试访问category时,不会发生到数据库的访问。

        2
  •  1
  •   Giovanni Galbo    17 年前

    如果使用loadWith-loadOption,那么您的pet查询将对类别执行一个热切的加载,这样您就可以执行此操作。

    mypet.category.name不会产生额外的查询,因此在循环或绑定pet集合时,可以将数据联接并强类型化,而不会对类别运行多个查询。

    或者可以使用linq to sql中的存储过程,结果是强类型的。