自定义LINQ数据映射

时间:2014-07-13 02:16:19

标签: c# sql linq

我有一组实体存储在sql数据库中。每个实体都存储在一个表中。一些实体字段存储在列中(因此我们可以使用它们进行查询),但整个实体实例在名为“JsonContent”的特殊列上被序列化为JSON。

我希望能够将LINQ用于这些实体。查询应支持两种模式:

  1. 精简对象:查询的项目仅包含列字段
  2. 胖对象:查询的项目包含列和'JsonContent'数据。
  3. 我如何做到这一点?

    我用以下类编写了一个类:

    class Store<TEntity> {
         public IList<TEntity> Select(
             Expression<Func<TProto, bool>> where, bool fat) {...}
    }
    

    我正在将where翻译成SQL。那是重新发明的轮子。我该如何摆脱它?

1 个答案:

答案 0 :(得分:0)

你应该让实体框架从你的数据库生成模型,它只包含你可以查询的1套(你称之为胖项目)(当然你不能在json内查询但不多你能做些什么。)

然后你可以创建一个普通的C#对象,你调用thinobject,使它包含所有属性减去json,并添加一个扩展方法,你可以命名ToThinObject,它接受一个I​​Queryable并返回一个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