将linq匿名结果传递给另一个查询的iqueryable对象

时间:2017-08-25 07:35:52

标签: c# asp.net-mvc entity-framework linq

我有两个表(tbPerson和tbDataLog),我需要在检查两个表上的某些条件后从一个表(tbPerson)返回Id。在此之后,此结果应传递给另一个查询。我的第一个查询成功返回Id(表的主键),我需要将这些ID传递给另一个查询,以便它根据这些Id返回数据。我还有一个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);

我收到此错误:

  

无法隐式转换类型System.Linq.IQueryable&#39;到了System.Linq.IQueryable&#39;。存在显式转换(您是否错过了演员表)?

欢迎任何建议或其他好方法。

2 个答案:

答案 0 :(得分:0)

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

log.where(x =&gt; x._LogID!= 0)的结果是IQueryable<LogResults>,您尝试将此结果分配给类型为{{的 dataset 1}},两种不同的类型。

编辑:
我看到你联系获取tbPerson id,然后你做第二个查询来获取这些人。你可以在第一次加入时获得这些人。

我只是修改你的代码:

IQueryable<tbPerson>

答案 1 :(得分:0)

我喜欢stackoverflow这个东西。当我们写问题时,我们迫使我们的大脑更深入地思考,在发布这个问题30分钟后,我以一种简单的方式解决了这个问题。有时候我们过于复杂化了!

 a  b  c
 7  7  15
 3  4  7
 6  6  13

@ankit_sharma:我没有测试过你的,但会试一试并回复你。感谢您给予时间和精力。