我几个小时都在寻找答案。我已经阅读了很多类似的帖子,但仍然无法达到目的。 在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并因此更改整个查询。 有没有办法利用从相同接口继承的所有表来获得更好的解决方法?
答案 0 :(得分:0)
尝试显式定义DbSet类 喜欢
DbSet<Class> GeoContext = db.Set<Class>(type);
我猜你在代码的某处定义了这个类