[英]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.