当前位置:编程学习 > C#/ASP.NET >>

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); --------------------编程问答--------------------

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();
    }
}
--------------------编程问答-------------------- 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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,