Linq to sql ode>private static readonly char[]SplitDelimiters=“.tocharray(); 私有IQueryable基本搜索(字符串搜索) { //用“”替换“”对“a b”没有帮助 string[]terms=sea

Linq to sql ode>private static readonly char[]SplitDelimiters=“.tocharray(); 私有IQueryable基本搜索(字符串搜索) { //用“”替换“”对“a b”没有帮助 string[]terms=sea,linq-to-sql,Linq To Sql,ode>private static readonly char[]SplitDelimiters=“.tocharray(); 私有IQueryable基本搜索(字符串搜索) { //用“”替换“”对“a b”没有帮助 string[]terms=search.Trim() .ToLower() .Split(分隔符, StringSplitOptions.RemoveEmptyEntries); IQueryable查询=_repository.GetTalents(); foreach(字

ode>private static readonly char[]SplitDelimiters=“.tocharray(); 私有IQueryable基本搜索(字符串搜索) { //用“”替换“”对“a b”没有帮助 string[]terms=search.Trim() .ToLower() .Split(分隔符, StringSplitOptions.RemoveEmptyEntries); IQueryable查询=_repository.GetTalents(); foreach(字符串搜索术语) { query=AddBasicSearch(查询,搜索术语); } 返回查询; } 专用IQueryable AddBasicSearch(IQueryable查询,字符串s) { 返回查询。其中(tal=> tal.EyeColor.ToString().ToLower()包含个 ||tal.FirstName.ToLower()包含个 ||tal.LastName.ToLower()包含个 ||tal.LanguagesString.ToLower()包含个 ); }
我今天遇到了同样的问题。我使用了一个MySql数据库,使用DbLinq作为linq提供程序,它工作正常。现在我从Devart转到提供商,我遇到了这个问题。您不是碰巧使用了同一个Devart提供商,是吗?:)不,我没有用德瓦特。我使用的是SQLServer2005和LINQtoSQL。
public class TalentService : ITalentService
{ 
    ITalentRepository _repository = null;

    private IQueryable<Talent> BasicSearch(string searchExpression)
    {
        IQueryable<Talent> t;
        string[] sa = searchExpression.Trim().ToLower().Replace("  ", " ").Split(' ');
        t = _repository.GetTalents();
        foreach (string s in sa)
        {
            t = t.Intersect(AddBasicSearch(s), new TalentComparer()); 
        }
        return t;
    }


    private IQueryable<Talent> AddBasicSearch(string s)
    {
        IQueryable<Talent> t2 = _repository.GetTalents()
            .Where(tal => tal.EyeColor.ToString().ToLower().Contains(s)
                          || tal.FirstName.ToLower().Contains(s)
                          || tal.LastName.ToLower().Contains(s) 
                          || tal.LanguagesString.ToLower().Contains(s) 
                          );
        return t2;
    } 
}



public class SqlTalentRepository:ITalentRepository
{
    public IQueryable<Model.Model.Talent> GetTalents()
    {
        var tal = from t in _db.Talents  
                  let tLanguage = GetTalentLanguages(t.TalentID)
                  where t.Active == true
                  select new Model.Model.Talent
                  {
                      Id = t.TalentID,
                      FirstName = t.FirstName,
                      LastName = t.LastName, 
                      TalentLanguages = new LazyList<Model.Model.TalentLanguage>(tLanguage),
                      LanguagesString = t.TalentLanguages.ToLanguageNameString(_LanguageRepository.GetLanguages()) 
                  };
        return tal ;
    }

    public IQueryable<Model.Model.TalentLanguage> GetTalentLanguages(int iTalentId)
    {
        var q = from y in this.talentLanguageList
                let Languages = _LanguageRepository.GetLanguages()
                where y.TalentId == iTalentId
                select new Model.Model.TalentLanguage
                {
                    TalentLanguageId = y.TalentLanguageId,
                    TalentId = y.TalentId,
                    LanguageId = y.LanguageId,
                    Language = Languages.Where(x => x.LanguageId == y.LanguageId).SingleOrDefault() 
                };
        return q.AsQueryable<Model.Model.TalentLanguage>();
    }

}



public static class TalentExtensions
{ 
    public static string ToLanguageNameString(this IEnumerable<TalentLanguage> source
        , IEnumerable<Model.Model.Language> allLanguages)
    {
        StringBuilder sb = new StringBuilder();
        const string del = ", ";
        foreach (TalentLanguage te in source)
        {
            sb.AppendFormat("{0}{1}", allLanguages
                .Where(x => x.LanguageId == te.LanguageID).SingleOrDefault().LanguageName, del);
        }
        string sReturn = sb.ToString();
        if (sReturn.EndsWith(del))
            sReturn = sReturn.Substring(0, sReturn.Length - del.Length);
        return sReturn;
    } 
}










public class TestTalentRepository : ITalentRepository
{ 
    IList<Talent> talentList; 

    public TestTalentRepository(ILanguageRepository _LanguageRepo )
    { 
        this._LanguageRepository = _LanguageRepo; 
        talentList = new List<Talent>(); 
        talentLanguageList = new List<TalentLanguage>(); 
        for (int i = 0; i < 55; i++)
        {
            var t = new Talent();
            t.Id = i;
            t.FirstName = (i % 3 == 0) ? "Ryan" : "Joe";
            t.LastName = (i % 2 == 0) ? "Simpson" : "Zimmerman";   
            AddLanguagesToTestTalent(i, t);
            talentList.Add(t);
        }
    }

    private void AddLanguagesToTestTalent(int i, Talent t)
    { 
        IList<Language> Languages = _LanguageRepository.GetLanguages().ToList<Language>();
        Random rLanguages = new Random();
        int numLanguages = rLanguages.Next(Languages.Count - 1) + 1;
        t.TalentLanguages = new LazyList<TalentLanguage>();
        for (int j = 0; j < numLanguages; j++)
        {
            var x = new TalentLanguage();
            x.TalentLanguageId = j;
            x.TalentId = i;
            Random random2 = new Random();
            int rand = random2.Next(Languages.Count);
            var y = Languages.ElementAtOrDefault(rand);
            Languages.RemoveAt(rand);
            x.Language = y;
            x.LanguageId = y.LanguageId;
            t.TalentLanguages.Add(x);
        }
    }


    public IQueryable<Talent> GetTalents()
    {
        var ts = from t in this.talentList 
                 let tLanguage = GetTalentLanguages(t.Id)
             where t.Active == true
             select new Model.Model.Talent
             {
                 Id = t.Id,
                 FirstName = t.FirstName,
                 LastName = t.LastName, 
                 TalentLanguages = new LazyList<Model.Model.TalentLanguage>(tLanguage),
                 LanguagesString = t.TalentLanguages.ToLanguageNameString(_LanguageRepository.GetLanguages()), 
                 City = t.City, 
             };
        return ts.AsQueryable<Model.Model.Talent>(); 
    }

    public IQueryable<Model.Model.TalentLanguage> GetTalentLanguages(int iTalentId)
    {
        var q = from y in this.talentLanguageList
                let Languages = _LanguageRepository.GetLanguages()
                where y.TalentId == iTalentId
                select new Model.Model.TalentLanguage
                {
                    TalentLanguageId = y.TalentLanguageId,
                    TalentId = y.TalentId,
                    LanguageId = y.LanguageId,
                    Language = Languages.Where(x => x.LanguageId == y.LanguageId).SingleOrDefault() 
                };
        return q.AsQueryable<Model.Model.TalentLanguage>();
    }

}
private static readonly char[] SplitDelimiters = " ".ToCharArray();

private IQueryable<Talent> BasicSearch(string search)
{
    // Just replacing "  " with " " wouldn't help with "a      b"
    string[] terms = search.Trim()
                           .ToLower()
                           .Split(SplitDelimiters, 
                                  StringSplitOptions.RemoveEmptyEntries);
    IQueryable<Talent> query = _repository.GetTalents();
    foreach (string searchTerm in terms)
    {
        query = AddBasicSearch(query, searchTerm);
    }
    return query;
}


private IQueryable<Talent> AddBasicSearch(IQueryable<Talent> query, string s)
{
    return query.Where(tal =>  
                       tal.EyeColor.ToString().ToLower().Contains(s)
                       || tal.FirstName.ToLower().Contains(s)
                       || tal.LastName.ToLower().Contains(s) 
                       || tal.LanguagesString.ToLower().Contains(s) 
                       );
}