LINQ to Access不支持JOIN

时间:2015-04-30 03:03:07

标签: c# linq ms-access

我正在使用一个名为" LINQ to Access"的第三方软件包。我收到以下错误:

  

System.Data.OleDb.OleDbException about"不支持JOIN运算符。"

我该如何解决?

 using(var context = AccessTools.CreateDataConnection(connStr)) {
     var tMachine = context.GetTable < Machine > ();
     var tUserinfo = context.GetTable < USERINFO > ();
     var tCheckintoutFiltered = context.GetTable < CHECKINOUT > ().Where(o => o.CHECKTIME >= startTime && o.CHECKTIME <= endTime);

     var join1 = tCheckintoutFiltered.Join(
       tMachine,
       outer => outer.sn,
       inner => inner.sn, (outer, inner) => new {
         outer.USERID, outer.CHECKTIME, outer.CHECKTYPE, inner.MachineNumber
       });

     var join2 = join1.Join(
       tUserinfo,
       outer => outer.USERID,
       inner => inner.USERID, (outer, inner) => new AttendanceLogObject {
         Checktime = outer.CHECKTIME, Checktype = outer.CHECKTYPE, MachineNumebr = outer.MachineNumber, Badgenumber = inner.Badgenumber
       });


     foreach(var alo in join2) {
       list.Add(new AttendanceLogObject { Checktime = alo.Checktime., Checktype = alo.Checktype, MachineNumebr = alo.MachineNumebr, Badgenumber = alo.Badgenumber });
     }

}

1 个答案:

答案 0 :(得分:0)

如果包不支持特定功能,那么“解决”它的唯一方法是:

  1. 说服软件包的开发人员实现该功能,或
  2. 如果它是一个开源项目,那么请下载该软件包的源代码并自行实现该功能。
  3. 否则,您需要使用产品 支持的功能“解决”问题。例如表[参与者] ......

    ID  FirstName  MedalID  Event
    --  ---------  -------  -----------
     1  Gord             1  Napping
     2  Helen            3  Daydreaming
    

    ......和[奖牌] ......

    ID  Name
    --  ------
     1  Gold
     2  Silver
     3  Bronze
    

    ......我真的希望能够做到这一点:

    var particips = from p in db.Participants 
                    join m in db.Medals on p.MedalID equals m.ID 
                    select new { p.FirstName, MedalName = m.Name, p.Event };
    foreach (var particip in particips)
    {
        Console.WriteLine(
                "{0} won a {1} medal in \"{2}\"", 
                particip.FirstName, 
                particip.MedalName, 
                particip.Event);
    }
    

    但如果不支持join,我可能不得不这样做:

    var medalNames = new Dictionary<int, string>();
    var medals = from m in db.Medals select m;
    foreach (var medal in medals)
    {
        medalNames.Add(medal.ID, medal.Name);
    }
    var particips = from p in db.Participants 
                    where p.MedalID != null
                    select p;
    foreach (var particip in particips)
    {
        Console.WriteLine(
                "{0} won a {1} medal in \"{2}\"", 
                particip.FirstName, 
                medalNames[(int)particip.MedalID],
                particip.Event);
    }