EF4.1 CODEFIRST 子查询 问题
public class Class1
{
public Class1()
{
this.Class2 = new List<Class2>();
}
public int Id { get; set; }
public string Id2 { get; set; }
public virtual List<Class2> Class2 { get; set; }
}
public class Class2
{
public int Id { get; set; }
public string ID2 { get; set; }
public Nullable<int> Class1_Id1 { get; set; }
Public bool IsDelete{ get; set;}
public virtual Class1 Class1 { get; set; }
}
Class2 是 Class1的子表 mapping已经写好
我想每次从数据库里面查找出来的Class1里面的Class2的IsDelete = false的所有数据
不想把CLASS1里面所有的CLASS2都取出来,请问大家有什么好点的方法吗
http://topic.csdn.net/u/20120418/11/9134c7d1-2e3c-483b-b8a1-0cc53ccf6285.html?seed=2064848852&r=78298656#r_78298656
这个网址也是这个帖子 --------------------编程问答-------------------- var query=dbcontext.Class1.Class2.Select(data=>data.IsDelete==false); --------------------编程问答--------------------
--------------------编程问答-------------------- public virtual List<Class2> Class2
var query=dbcontext.Class1.Class2.Select(data=>data.IsDelete==false);
{
get
{
return dbContent.Class2.Where(x => x.id2 == this.id && !x.IsDelete).ToList();
}
}
--------------------编程问答-------------------- C# code
var query=dbcontext.Class1.Class2.Select(data=>data.IsDelete==false);
这样写有问题,
public virtual List<Class2> Class2
{
get
{
return dbContent.Class2.Where(x => x.id2 == this.id && !x.IsDelete).ToList();
}
}
直接取也有点不妥!
var q1 = db.Class1.GroupJoin(db.Class2,
ee => ee.Id1,
me => me.Class1_Id1,
(ee, meCollection) =>
new
{
e = ee,
Collection = meCollection.Where(i => i.ID4 == "2")
});
List<Class1> S3 = q1.ToList().Select(u => u.e).OfType<Class1>().ToList();
后来改成这样的形式,不知道有没有更简单的方法! --------------------编程问答-------------------- 在你DbContext的构造函数中加入:
Configuration.ProxyCreationEnabled = false;
然后查询时:
--------------------编程问答-------------------- 没有特别明白你的意思
context.Class2s.Where(c2=>!c2.IsDelete).Select(c2=>c2.Class1).ToList();
你先看下我理解的对不?
假设你数据库里的数据是这样的
List<Class1> classone = new List<Class1>();
classone.Add(new Class1() { Id = 1, Class2 = new List<Class2>() {
new Class2(){ Class1_Id1=1, IsDelete=false, Id=1 },
new Class2(){ Class1_Id1=1, IsDelete=true, Id=2 },
new Class2(){ Class1_Id1=1, IsDelete=false, Id=3 },
new Class2(){ Class1_Id1=1, IsDelete=true, Id=4 }
} });
classone.Add(new Class1()
{
Id = 2,
Class2 = new List<Class2>() {
new Class2(){ Class1_Id1=2, IsDelete=false, Id=5 },
new Class2(){ Class1_Id1=2, IsDelete=true, Id=6},
new Class2(){ Class1_Id1=2, IsDelete=false, Id=7 },
new Class2(){ Class1_Id1=2, IsDelete=true, Id=8}
}
});
classone.Add(new Class1()
{
Id = 3,
Class2 = new List<Class2>() {
new Class2(){ Class1_Id1=3, IsDelete=true, Id=9 },
new Class2(){ Class1_Id1=3, IsDelete=true, Id=10}
}
});
你现在要获得 class 1 的集合 只要这个class1 的子集合 class2 里有一条数据 isdelte 为flase
并且你在用 EF时 希望不要获得 class2 的数据 这样效率低 是么?
可以这样写 肯定成功的
db.classone.Where(x=>x.Class2.Any(j=>!j.IsDelete)).ToList();
不行的话 加我QQ 1570122986
或者去我博客 留言~~
http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html
补充:.NET技术 , LINQ