0

私のWeb APIでは、linqクエリ自体からメソッドを実行する必要があります。私のlinqクエリコードスニペットが所属するメソッドは以下の通り、ローカルメソッドを呼び出して必要なデータを取得します。linqクエリからローカルメソッドを呼び出す方法

var onlineData = (from od in db.RTLS_ONLINEPERSONSTATUS 
        let zoneIds = db.RTLS_PERSONSTATUS_HISTORY.Where(p => p.person_id == od.PERSONID).OrderByDescending(z => z.stime > startOfThisDay && z.stime < DateTime.Now).Select(z => z.zone_id).ToList() 

        let zoneIdsArray = this.getZoneList((zoneIds.ToArray())) 
        let fzones = zoneIdsArray.Select(z => z).Take(5) 
        select new OnlineDataInfoDTO 
        { 
         P_ID = od.PERSONID, 
         T_ID = (int)od.TAGID, 
         LOCS = fzones.ToList() 
        } 

public int[] getZoneList(decimal[] zoneIdsArray) 
    { 
     int[] zoneIds = Array.ConvertAll(zoneIdsArray, x => (int)x); 
     List<int> list = zoneIds.ToList(); 
     for (int c = 1; c < zoneIdsArray.Count(); c++) 
     { 
      if (zoneIdsArray[c] == zoneIdsArray[c - 1]) 
      { 
       list.Remove((int)zoneIdsArray[c]); 
      } 
     } 
     return list.ToArray(); 
    } 

私は聞かせてzoneIdsArray = this.getZoneListで例外を取得しています((zoneIds.ToArray()))は、この問題を解決するためのどのような方法があります。私はこのリンク(Linq query to get person visited zones of current day)から私の問題を解決するための論理を持って、与えられたロジックは私の要件のために絶対に良いですが、私はそれを実行中に問題に直面しています。

答えて

1

これを実現する1つの方法は、基盤となるLINQプロバイダではなく、クライアントで投影を行うことです。これは、2つの段階にクエリを分離することによって行うことができます。

var peopleStatus = 
    from od in db.RTLS_ONLINEPERSONSTATUS 
    let zoneIds = db.RTLS_PERSONSTATUS_HISTORY 
     .Where(p => p.person_id == od.PERSONID) 
     .OrderByDescending(z => z.stime > startOfThisDay && z.stime < DateTime.Now) 
     .Select(z => z.zone_id) 
     .ToList() 
    select new 
    { 
     Person = od, 
     ZoneIds = zoneIds, 
    }; 

var onlineData = 
    from od in peopleStatus.ToList() 
    let zoneIdsArray = this.getZoneList((od.ZoneIds.ToArray())) 
    let fzones = zoneIdsArray.Select(z => z).Take(5) 
    select new OnlineDataInfoDTO 
    { 
     P_ID = od.Person.PERSONID, 
     T_ID = (int)od.Person.TAGID, 
     LOCS = fzones.ToList() 
    }; 
+0

あなたは、私が感謝をたくさん達成することは非常に難しいと感じた私の問題を解決し、そんなにダーリンDimtrovありがとう –

関連する問題