ctr*_*3nd 23 linq search full-text-search linq-to-sql
在Linq中没有内置全文搜索,并且似乎没有很多关于这个主题的帖子所以我有一个游戏并为我的utleity类提出了这个方法:
public static IEnumerable<TSource> GenericFullTextSearch<TSource>(string text, MyDataContext context)
{
//Find LINQ Table attribute
object[] info = typeof(TSource).GetCustomAttributes(typeof(System.Data.Linq.Mapping.TableAttribute), true);
//Get table name
String table = (info[0] as System.Data.Linq.Mapping.TableAttribute).Name;
//Full text search on that table
return context.ExecuteQuery<TSource>(String.Concat("SELECT * FROM ", table, " WHERE CONTAINS(*, {0})"), text);
}
Run Code Online (Sandbox Code Playgroud)
并将此包装器添加到每个部分Linq类,其中有一个全文索引
public static IEnumerable<Pet> FullTextSearch(string text, MyDataContext context)
{
return (LinqUtilities.GenericFullTextSearch<Pet>(text, context) as IEnumerable<Pet>);
}
Run Code Online (Sandbox Code Playgroud)
所以现在我可以用简洁的东西做全文搜索
var Pets = Pet.FullTextSearch(helloimatextbox.Text, MyDataContext).Skip(10).Take(10);
Run Code Online (Sandbox Code Playgroud)
我假设目前只需要进行非常基本的搜索.任何人都可以改进吗?是否可以实现作为扩展方法并避免包装?
dsw*_*tik -3
你可以做这样的事情
var results = (from tags in _dataContext.View_GetDeterminationTags
where tags.TagName.Contains(TagName) ||
SqlMethods.Like(tags.TagName,TagName)
select new DeterminationTags
{
Row = tags.Row,
Record = tags.Record,
TagID = tags.TagID,
TagName = tags.TagName,
DateTagged = tags.DateTagged,
DeterminationID = tags.DeterminationID,
DeterminationMemberID = tags.DeterminationMemberID,
MemberID = tags.MemberID,
TotalTagged = tags.TotalTagged.Value
}).ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,TagName.Contains 还包含 SQLMethods.Like,只需使用
using System.Data.Linq.SqlClient;
Run Code Online (Sandbox Code Playgroud)
获得对该 SQLMethods 的访问权限。
| 归档时间: |
|
| 查看次数: |
27718 次 |
| 最近记录: |