求高效查旬语句,万分感谢
public class StatusA
{
public String StatusID { get; set; }
public String BID { get; set; }
}
public class StatusB : StatusA
{
public Boolean IsDone { get; set; }
}
public class ValueA
{
public String VID { get; set; }
}
public class ValueB:ValueA
{
public String StatusID { get; set; }
public String BID { get; set; }
}
public class ddd
{
public List<StatusA> Statusa = new List<StatusA>();
public List<StatusB> Statusb = new List<StatusB>();
public List<Value> ValueA = new List<Value>();
public List<Value> ValueB = new List<Value>();
}
如上结构,需要查出的结果 为
Statusa与Statusb -->StatusID,BID相同,并且Statusb中的S==true;
上述结果与ValueA-->StatusID,BID相同,并且ValueA的VID在ValueA中不存在;
求最快之linq语句,万分感谢!
另如有非集合建议,请不吝赐教!
[解决办法]
用linq吧
var s = from sa in Statusa
from sb in Statusb
from va in ValueA
from vb in ValueB
where sa.BID.Trim() == sb.BID.Trim() && sb.IsDone && sb.StatusID.Trim() == vb.StatusID.Trim() && sb.BID == vb.BID && vb.VID.Trim() == va.VID.Trim()
select new { sa, sb, va, vb };
[解决办法]
各位早安。。。
我是群里来的。。。
[解决办法]
where
vs.VID is null
vs是什么?
[解决办法]
var query=from sa in StatusA
join sb in StatusB on new {sa.StatusID , sa.BID} equals new {sb.StatusID ,sb.BID}
where sb.IsDone
join vb in
Valueb on new {sb.StatusID,sb.BID} equals new {vb.StatusID,vb.BID}
join va in
Valuea.Where(x=>!x.VID.HasValue) on vb.VID equlas va.VID into leftJoin
from va in leftJoin.DefalultIfEmpty()
select new {sa,sb,vb,v=va==null?null:va};
[解决办法]
是否真的要 左连接 右连接,最后的结果是什么?
是 ValueB 的集合还是 所有四个类的集合 ?
var query1 = Statusb.Where(w => w.IsDone && Statusa.Any(a => a.StatusID == w.StatusID && a.BID == w.BID));
IEnumerable<ValueB> query2 = ValueB.Where(w => query1.Any(a => a.BID == w.BID && a.StatusID == w.StatusID) && ValueA.All(a => a.VID != w.VID));
[解决办法]
用Sql效率最高了。