2017-08-25 7 views
0

私は2つのテーブル(tbPersonとtbDataLog)を持っており、両方で特定の条件をチェックした後、1つのテーブル(tbPerson)からIDを返す必要があります。この後、この結果を別のクエリに渡す必要があります。私の最初のクエリはId(テーブルの主キー)を正常に返し、これらのIDを別のクエリに渡して、これらのIDに基づいてデータを返す必要があります。また、IQueryable型の基本オブジェクトを使用して、データをフェッチする特定の条件をチェックします。linq匿名の結果を別のクエリのiqueryableオブジェクトに渡します。

IQueryable<tbPerson> dataset 

と私はIQueryableをから他への変更これを、それは、コードの他の部分を壊すだろうと)

私の最初のLINQ文のできない:私は私の結果にアクセス

public static IQueryable<LogResults> GetResultsForYes() 
    { 
     Databasename ents = new Databasename(); 
     var ids = (from f in ents.tbPerson 
        join g in ents.tbDataLog 
        on f.InfoID equals g.RefId 
        where g.Tag == "subscribed" && g.OldValue == "No" && g.Action == "Modified" 
        select new LogResults { _LogID = f.Id }).OrderBy(x => x._LogID); 
     return ids; 
    } 

public class LogResults 
    { 
     public int _LogID { get; set; } 
    } 

この場所のようなものを私はすべてのIDをデバッガで見ることができます。

IQueryable<LogResults> log = GetResultsForYes(); 

これらのIDでtbPersonからレコードを取得しようとしたときに問題が発生しました。

dataset=log.where(x=>x._LogID != 0); 

私はこのエラーを取得する:

Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Linq.IQueryable'. An explicit conversion exists(are you missing a cast)?

任意の提案や他のいくつかの良いアプローチは大歓迎です。

答えて

0
IQueryable<tbPerson> dataset=log.where(x=>x._LogID != 0); 

log.whereの結果(X => x._LogID!= 0)IQueryable<LogResults>で、あなたはタイプIQueryable<tbPerson>データセット、2つのdiferentタイプにこの結果を代入しようとしています。

EDIT:
あなたはtbPerson IDを取得するために参加し、人を取得するために2番目のクエリを実行します。あなたは最初の参加者を得ることができます。

私は自分のコードを変更:

IQueryable<tbPerson> persons = from person in ents.tbPerson 
         join g in ents.tbDataLog 
         on person.InfoID equals g.RefId 
         where g.Tag == "subscribed" && g.OldValue == "No" && g.Action == "Modified" 
         select person; 
0

私はstackoverflowのについては、この事が大好きです。私たちが質問を書くとき、私たちは脳にもっと深く考えるように強制し、この質問を投稿して30分後に簡単な方法で解決しました。時には私たちは物事を複雑にしました!

var ids = (from f in ents.tbPerson 
         join g in ents.tbDataLog 
         on f.InfoID equals g.RefId 
         where g.Tag == "subscribed" && g.OldValue == "No" && g.Action == "Modified" 
         select new { f.Id }).ToArray(); 

      var allId = ids.Select(x => x.Id).ToArray(); 
      dataset = dataset.Where(x => allId.Contains(x.Id)); 

@ankit_sharma:私はあなたのテストはしていませんが、試してみるとあなたに戻ってきます。時間と労力を与えてくれてありがとう。

関連する問題