你必須要知道的difference between IEnumerable and IQueryable
的IQueryable的好處是,你的查詢將被IQueryable的,這通常是一個數據庫的prodiver執行。將數據從數據庫傳輸到本地內存是一個相對較慢的過程,因此最好通過儘可能讓數據庫儘可能多地限制必須傳輸的數據。
IQueryable的缺點是它只知道提供者的功能。在SQL的情況下檢查
Supported and Unsupported LINQ Methods (LINQ to Entities)
列表這意味着你不能使用你自己的功能,如RemoveDiacritics。
你的問題的解決取決於你有多久做到這一點查詢,該查詢是否必須執行非常快
如果查詢不這樣做很多時候,它並沒有成爲在光的速度,就足以補充AsEnumerable()
var result = People
.AsEnumerable()
.Where(p => p.Name.ToUpper().RemoveDiacritics()....);
如果查詢經常做,必須是真快,考慮包含Name.ToUpper的值的值延長你的人表( ).RemoveDiacritics()
class People
{
public string Name {get; set;}
public string NameWithoutDiacritics {get; set;}
...
}
每當你的模型添加或更新的人對象,確保NameWithoutDiacritics包含正確的值
public void Update(People people)
{
using (var dbContext = new MyDbContext())
{
var foundPeople = people.Find(people.Id);
foundPeople.Name = people.Name;
foundPeople.NameWithoutDiacritics = people.Name
.ToUpper()
.RemoveDiacritics();
...
dbContext.SaveChanges();
}
}
更改您的查詢:
var result = People.Where(p => p.NameWithoutDiacritics.Contains(queryText));
您必須首先獲取數據,然後調用自定義方法來過濾。哪個效率不高。因此,您需要找到如何在不調用表數據的自定義函數的情況下搜索數據。 – Harsh