在a.Field <int>(“ref_id”)!= b.Field <int>(“ref_id”)中给出的错误这个b的原因未定义

时间:2018-04-12 07:07:44

标签: c# asp.net linq datatable

我想获取这样的数据,但它在where子句中给出了一个错误 在Linq中写这个查询

var q = (from a in dt.AsEnumerable()
         join b in dt2.AsEnumerable() on a.Field<string>("id") equals b.Field<string>("id")
         into y
         from z in y.DefaultIfEmpty()
         where a.Field<int>("ref_id") != b.Field<int>("ref_id")
         select new wrongreferralDTO(){
                c_id = a.Field<int>("captain_id"),
                event_time = a.Field<DateTime>("event_time")
         }).ToList();

1 个答案:

答案 0 :(得分:0)

你应该这样试试,

  var refIdsToremove = dt2.AsEnumerable().Select(b => b.Field<int>("ref_id")).ToList();
            var q = (from a in dt.AsEnumerable()
                     join b in dt2.AsEnumerable() on a.Field<string>("id") equals b.Field<string>("id")
                     into y
                     from z in y.DefaultIfEmpty()
                     where !refIdsToremove.Contains( a.Field<int>("ref_id") )
                     select new
                     {
                         c_id = z.Field<int>("captain_id"),
                         event_time = z.Field<DateTime>("event_time")
                     }).ToList();

因为当你将into y b变量放在范围之外时,你无法在加入其他变量y后访问b