我有一组实体存储在sql数据库中。每个实体都存储在一个表中。一些实体字段存储在列中(因此我们可以使用它们进行查询),但整个实体实例在名为“JsonContent”的特殊列上被序列化为JSON。
我希望能够将LINQ用于这些实体。查询应支持两种模式:
我如何做到这一点?
我用以下类编写了一个类:
class Store<TEntity> {
public IList<TEntity> Select(
Expression<Func<TProto, bool>> where, bool fat) {...}
}
我正在将where
翻译成SQL。那是重新发明的轮子。我该如何摆脱它?
答案 0 :(得分:0)
你应该让实体框架从你的数据库生成模型,它只包含你可以查询的1套(你称之为胖项目)(当然你不能在json内查询但不多你能做些什么。)
然后你可以创建一个普通的C#对象,你调用thinobject,使它包含所有属性减去json,并添加一个扩展方法,你可以命名ToThinObject,它接受一个IQueryable并返回一个IQueryable,只会在原始的iqueryable上重新选择一个选择
这样你就可以在一个没有实现的查询中做任何你想做的事情(没有foreach / Tolist等)
var q = context.MyTable
.Where(bla)
.Take(bla)
.etc etc etc
var Everything = q.ToList() // retrieves everything including JSON
var NotEverything = q.ToThinObject().ToList() // contains everything except the JSON, JSON is never retrieved from the database