我在SqlServer中有三个表(相当于SQL Server中链接中的图像)
http://www.mojoimage.com/free-image-hosting-view-06.php?id=2Untitled-2.gif
当我使用LINQ to Sql时,我在dbml文件中得到三个类:
class Item
{
Guid ItemId;
int ItemSize;
}
class Video
{
Guid RecordId;
Guid ItemId;
string Resolution;
}
class Audio
{
Guid RecordId;
Guid ItemId;
int Duration;
}
然后我创建了这三个接口:
Interface IItem
{
Guid ItemId;
int ItemSize;
}
Interface IVideo
{
string Resolution;
}
Interface IAudio
{
int Duration;
}
和一个名为VideoItem的类,它实现了“Video”接口和“Item”接口:
class VideoItem:IItem,IVideo
{
public Guid ItemId;
public int ItemSize;
public string Resolution;
}
和一个名为AudioItem的类,它实现了“Audio”接口和“Item”接口。
class AudioItem :IItem,IVideo
{
public Guid ItemId;
public int ItemSize;
public int Duration;
}
现在我想使用LINQ从我的表中查询VideoItem实例(这些实例都在Item表和Video表中)。
我是否需要创建自定义LINQ提供程序?
答案 0 :(得分:0)
from ai in Audio
where ai.XXXX == whatever
select new AudioItem
{
ItemId = ai.ItemId,
ItemSize = ai.Item.ItemSize,
Duration = ai.DUration
}
这假设您在Item&amp ;;之间设置了外键关联。基于ItemId的音频。如果没有,你将不得不:
from ai in Audio
join i in Item on ai.ItemId equal i.ItemiD
where ai.XXXX == whatever
select new AudioItem
{
ItemId = ai.ItemId,
ItemSize = i.ItemSize,
Duration = ai.DUration
}
更新:你可以像这样创建一个AUdioItem列表:
var listOfAudioItems =
(from ai in Audio
where ai.XXXX == whatever
select new AudioItem
{
ItemId = ai.ItemId,
ItemSize = ai.Item.ItemSize,
Duration = ai.DUration
}).ToList();
一旦有了这个,就可以在LINQ状态下将它作为单个表使用:
from ai in listOfAudioItems
where ai.Duration > 5 && ai.ItemSize == 10
select ai;
答案 1 :(得分:0)
@James提供的解决方案比编写自定义LINQ提供程序容易得多。您可以使用连接两个表的LINQ查询并分别选择结果作为AudioItem或VideoItem来选择两个实体之间的连接。