如果我有两张桌子......分类和宠物。
在LINQ to SQL中是否有办法将连接的查询映射的结果映射到另一个强类型类(例如:PetWithCategoryName),以便我可以强烈地将它传递给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>
答案 0 :(得分:4)
我如何使用LoadWith?我没有在网上找到太多帮助。有什么好资源吗?
您可以这样做:
var loadOption = new DataLoadOptions();
loadOption.LoadWith<Pets>(p => p.Category);
db.LoadOptions = loadOption;
var pets = from p in PetStoreContext.Pets
select p;
然后您的宠物查询已经包含类别,因此当您尝试访问类别时,不会访问数据库。
答案 1 :(得分:1)
如果您使用LoadWith LoadOption,那么您的Pet查询将对类别进行急切加载,以便您能够执行
MyPet.Category.Name,不会产生额外的查询,因此您可以加入数据并强类型,而不会在Pet集合上循环或绑定时为类别运行多个查询。
或者您可以在Linq To SQL中使用存储过程,结果是强类型的。