[英]Switching DbSet by name
我一直在尋找答案幾個小時。 我已經閱讀了許多類似的文章,但仍然無法達到目的。 在對ASPNET MVC網站進行地理定位時,我需要根據用戶ip在“ n”個表之間切換。 所有表都被命名為“ GeoData_”,加上方便的countryCode后綴(IT,FR,US ...)。 此外,由於它們都包含相同的字段,因此它們從相同的“ GeoData”接口繼承。
我知道我可以通過以下方式在控制器中獲得所需的dbset:
string countryTable = "GeoData_" + Server.HtmlEncode(Request.Cookies["_country"].Value.ToUpper());
var type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(t => t.Name == countryTable);
DbSet GeoContext = db.Set(type);
現在,我無法像以前使用的那樣傳遞此DbSet,即
var searchResult = GeoContext
.Where(c => c.PlaceName.ToUpper().Contains(term.ToUpper()))
.Select(c => new
{
PlaceName = c.PlaceName,
PostalCode = c.PostalCode,
GeoDataID = c.ID,
Latitude = c.Latitude,
Longitude = c.Longitude
}
)
.Distinct()
.OrderBy(c => (c.PlaceName.ToUpper().IndexOf(term.ToUpper())))
.ToList();
因為無法再將模型的字段(例如c.Placename等)引用到GeoContext。
我想一種方法可以使用System.Linq.Dynamic並因此更改整個查詢。 有沒有辦法利用從同一接口繼承的所有表來獲得更好的解決方法?
嘗試像明確定義DbSet類
DbSet<Class> GeoContext = db.Set<Class>(type);
我猜你在代碼的某個地方定義了這個類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.