我正在使用ASP.NET MVC中的图片库,并试图同时了解LINQ to SQL。我有3个表来保存图像库数据,通过链接表有很多关系。这些是:
廊
(身份证,姓名,说明)图像
(Id,Title,Description,FileName)GalleryImage
(GalleryId,ImageId)
GalleryImage将FK关系设置为其他两个表。
我希望能够加载我的画廊,并显示与每个画廊相关联的图像,并且能够显示单个图像并列出与其关联的画廊。由于我是Linq to SQL的新手,我不知道该怎么做。有人可以指导我吗?
答案 0 :(得分:1)
Gallery.GalleryImages<GalleryImage>
您应该可以通过它访问您的GalleryImage对象,然后在您可以调用的每个GalleryImage上访问:
GalleryImage.Image
这假设关系在DBML设计器中表示?
答案 1 :(得分:1)
您需要通过DataContext对象访问所有这些内容。
查看为dbml生成的c#文件并查找标有Association属性的EntitySet集合 - Gallary和Image中应该有一个,GallaryImage中应该有2个。如果正确生成了dbml,您应该可以执行以下操作 -
在我的脑海中,我很确定设计界面会将Gallery的复数命名为Gallerys而不是画廊,所以这不是拼写错误 -
DataConext dc = new GalleryDataConext();
foreach (Gallery g in dc.Gallerys)
{
Console.Writeline("gallery id " + g.Id.ToString());
foreach(GalleryImage gi in g.GalleryImages)
{
Console.Writeline("galleryimage id " + gi.Id.ToString());
foreach(Image i in gi)
{
Console.Writeline("image id " + i.Id.ToString());
}
}
即使没有关联,以下内容也应该有效 -
int GalID = 1;
GalleryDataConext dc = new GalleryDataConext()
var pics = from g in dc.Gallary
join gi in dc.GallaryImages on g.Id equals gi.GallaryId
join i in dc.Images on gi.ImageId equals i.Id
where g.Id = GalID
select i;
要获得pic id的工资,你可以 -
int PicID = 1;
var gals = from g in dc.Gallary
join gi in dc.GallaryImages on g.Id equals gi.GallaryId
join i in dc.Images on gi.ImageId equals i.Id
where i.Id = PicID
select g;
上面的内容将返回IQueryable<Gallary>
,并在您对其进行枚举时执行sql查询。
答案 2 :(得分:1)
步骤1:创建表之间的关联。
时你会知道这是正确完成的http://msdn.microsoft.com/en-us/library/bb629295.aspx
第2步:获取图库列表:
using (CustomDataContext myDC = new CustomDataContext)
{
List<Gallery> result = myDC.Galleries.ToList();
}
步骤3:然后用户点击图库并且您想要其图像:
using (CustomDataContext myDC = new CustomDataContext)
{
List<Image> result = myDC.Galleries
.Where(g => g.Id = selectedGallery.Id);
.SelectMany(g => g.GalleryImages)
.Select(gi => gi.Image)
.ToList()
}
步骤4:然后用户点击图片,你想要它的画廊:
using (CustomDataContext myDC = new CustomDataContext)
{
List<Gallery> result = myDC.Images
.Where(i => i.Id = selectedImage.Id);
.SelectMany(i => i.GalleryImages)
.Select(gi => gi.Galleries)
.ToList()
}
如果您只想加载整个数据库,请执行以下操作:
using (CustomDataContext myDC = new CustomDataContext)
{
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Gallery>(g => g.GalleryImages);
dlo.LoadWith<GalleryImage>(gi => gi.Image);
myDC.LoadOptions = dlo;
List<Gallery> result = myDC.Galleries.ToList();
}
完成此操作后,将加载并连接整个对象图供您使用。
答案 3 :(得分:-1)
您需要在表之间创建关系。如果你确定你已经创建了关系,那么可能是类的子或父属性可能被设置为互联网,他们应该公开