qui*_*qui 5 c# linq performance linq-to-sql
数据库示例:
图像 - ImageTag - 标记
图像可以有多个标签.关系设置很好,但我遇到了性能问题.
我有许多不同的查询,根据不同的标准选择图像.它们工作正常,但是不会使用这些查询选择标记的数据.
这意味着如果我遍历10个图像的列表并尝试访问其标记对象(通过ImageTag),则在我的数据库上为每个图像执行新的查询.
<%foreach (LINQRepositories.Image i in Model)
{ %>
<li><%=i.title%>
<ul>
<%foreach(ImageTag t in i.ImageTags){ %>
<li><%=t.Tag.name%></li>
<%} %>
</ul>
</li>
<%} %>
Run Code Online (Sandbox Code Playgroud)
这显然不太理想.有没有办法强制LINQ to SQL查询某些数据?
以下是我的一个查询示例
public static IQueryable<Image> WithTags(this IQueryable<Image> qry, IEnumerable<Tag> tags)
{
return
from i in qry
from iTags in i.ImageTags
where tags.Contains(iTags.Tag)
select i;
}
Run Code Online (Sandbox Code Playgroud)
尝试dataload选项后,这是一个生成的示例查询
{SELECT [t0].[id],[t0].[title],[t0].[legend],[t0].[dateAdded],[t0].[删除],[t0].[averageRating], [t0].[numberOfVotes],[t0].[imageOfTheWeek],[t0].[copyright],[t0].[copyrightText],[t0].[areaOfInterest],[t0].[typeId],[t0 ].[authorId],[t0].[editorialStatusId],[t0].[comments] FROM [dbo].[Image] AS [t0] CROSS JOIN([dbo].[ImageTag] AS [t1] INNER JOIN [ dbo].[Tag] AS [t2] ON [t2].[id] = [t1].[TagId])WHERE([t2].[id] = @ p0)AND(NOT([t0].[删除] ] = 1))AND(NOT([t0].[删除] = 1))AND([t1].[ImageId] = [t0].[id])}
为什么不尝试这样的事情:
return
from i in qry
from iTags in i.ImageTags
where tags.Contains(iTags.Tag)
select new { TagName = i.Tag.name };
Run Code Online (Sandbox Code Playgroud)
这将返回一个仅包含标签名称的集合。我希望我在这里能正确理解你的问题。希望能帮助到你
| 归档时间: |
|
| 查看次数: |
1934 次 |
| 最近记录: |