让我们看看对象:
public class Obj1
{
public string Id { get; set; }
}
public class Obj2
{
public string Id { get; set; }
public string Obj1Id { get; set; }
}
public class Obj3
{
public string Id { get; set; }
public string Obj2Id { get; set; }
}
我使用包含这样的内容:
var objs3 = session.Query<Obj3>()
.Customize(x => x.Include<Obj3>(o3 => o3.Obj2Id))
.Take(1000)
.ToList();
foreach (var obj3 in objs3)
{
var obj2 = session.Load<Obj2>(obj3.Obj2Id);
//do something with it
}
我的问题是,是否有可能添加查询类似.Where(o2 =&gt; o2.Obj1Id ==“some / Id”)?查询在客户端(Linq)方面对Obj2一无所知,但服务器端使用它们,因为这只向DB发出一个请求。
我试着看看如何工作索引和投影,但没有运气的一些结构。也许我的观点是从关系数据库变形的,还有其他解决方案,需要我的结构重新定义......
我的另一个解决方案是将Obj1Id添加到Obj3,但这会产生重复(我可以忍受这个;)
对象的一些额外信息:
- Obj1对每个客户都是唯一的,因此大约有200个文件
- Obj2:Obj3是1:1的兄弟姐妹,每个兄弟都有自己的观点属性,每个顾客约为100.000
奖金问题:是否有类似Inclide链接的内容?包括Obj1在内的包含Obj2? (这个我不会用,只是问题)
答案 0 :(得分:1)
不,你不能在include中添加条件。 它要么全部进入,要么根本没有。
答案 1 :(得分:0)
正如奥伦所说,你有条件。因此,如果Obj2和Obj3都有一些共同的东西,比如Obj1的Id,你可以重构你的数据,或者使用多地图(也许还可以减少)索引。
在您的情况下哪种方式更好取决于您拥有的数据类型,这里没有一般性答案。 (也许你可以用实际的类名而不是像Obj1-3这样的抽象名来发布另一个更具体的问题。)