我使用linq时遇到问题: 查询使用" ="很慢,我用这种方式创建它:
predicate = predicate.And(p => p.Fields.Any(f => f.Name == name && f.ExpectedValue == value));
但是,"相同"查询使用"包含"很快:
predicate = predicate.And(p => p.Fields.Any(f => f.Name == name && f.ExpectedValue.Contains(value)));
在我的桌子上,我有#34;姓名"并且在" ExpectedValue"。
有什么建议吗?
答案 0 :(得分:1)
如果您的列是VARCHAR,那么您需要告诉NHibernate将其映射为AnsiString,否则它将发送您作为NVARCHAR查询的参数,然后SQL服务器将决定它必须转换每个VARCHAR值到NVARCHAR进行比较。
因为SQL服务器必须将表中的每个VARCHAR字段转换为NVARCHAR,所以它不会使用索引,这可能会导致严重的查询减速,无明显原因。