假设我有一个术语数据库和一个字符串列表,这是一个好(有效)的想法吗?它工作得很顺利,但我不确定它是否可扩展或最有效。
var results =
from t in Terms
join x in Targets on t.Term equals x
select t;这里Terms是一个带有索引表Term的数据库表。目标是字符串的IEnumerable。术语可能包含数百万个字符串,目标在10-20个字符串之间。有什么想法吗?
发布于 2010-12-16 03:54:09
归根结底,就效率而言,重要的是针对数据库执行的查询是否有效。要查看这一点,您可以使用SQL Profiler或查找一个应用程序,该应用程序将向您显示由linq- To -sql生成的SQL。
如果使用SQL Profiler,请确保让它查找存储过程,因为Linq- to -sql使用exec_sql过程来执行查询。
发布于 2010-12-16 04:00:39
如果您需要在一个键上连接两个表,就像在您的示例中一样,除了实际的连接之外,没有其他方法可以表达它。你所拥有的就是它所能得到的最高效率。
但是,将select更改为只返回您感兴趣的字段,并确保修剪了它们,因为sql数据库喜欢返回带有尾随空格的char字段,并且它们需要时间来处理和跨网络传输。
发布于 2010-12-16 04:21:58
嗯,我不知道你能像这样加入当地的收藏。也许这是.Net 4.0的一个特性?
我经常发出这样的查询:
IQueryable<Term> query =
from t in Terms
where Targets.Contains(t.Term)
select t; 这里有一些注意事项。
List<string>引用。将列表中的reference.IList<string>参数时,变量x可能不是sql。虽然linq to sql会很乐意地将数千个字符串转换为参数(我见过50k个参数),但Sql Server只接受~2100个。如果超过此限制,您将获得sql exception.。
https://stackoverflow.com/questions/4454196
复制相似问题