2017-08-25 78 views
0

我有兩個表(tbPerson和tbDataLog),我需要在兩個表上檢查特定的條件後,從一個表(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; } 
    } 

訪問我的結果是這樣的地方我可以在調試器中看到所有的Ids。

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>類型的,二diferent類型。

編輯:
我看到你做一個加入獲得tbPerson ID,然後你做第二個查詢來獲取人。您可以在第一次加入時獲得這些人員。

我只是修改代碼:

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

我愛這件事計算器。當我們寫問題的時候,我們會迫使我們的大腦深思熟慮,在發佈這個問題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:我沒有測試過你的,但會試一試,然後回來給你。感謝您付出時間和精力。

相關問題