查询中的实体查询是否可行

时间:2014-05-21 13:58:59

标签: c# entity-framework wcf postgresql

我不确定如何提出这个问题。我需要创建一个对象,我相信它被称为投影,它具有一个查询的结果,另外还需要查询另一个表并将该对象放入投影中。

这是我们使用HTML5,JS和PhoneGap构建的网站的C#WCF服务。

编辑:在ToList上获取错误(请参阅代码) - “方法或操作未实现。”

EDIT3:将实体对象company_deployed_files更改为IQueryable并删除了FirstOrDefault导致新的/不同的异常Message =“'Distinct'操作不能应用于指定参数的集合ResultType。\ r \ nParameter name:参数“

背景:这是一种混乱的实体模型,因为它是为Postgresql开发的,除了手工,我无法访问任何工具来更新模型。此外,即使我们这样做,数据库的一些设计问题也不允许出色的模型。换句话说,我的两个表没有关键约束(在实体模型中)来在实体模型中执行连接 - 除非有人告诉我如何 - 老实说这可能是最好的解决方案 - 但需要一些帮助。

但是让下面的代码工作将是一个很好的解决方案。

public List<FileIDResult> GetAllFileIDFromDeviceAndGroup ( int deviceID, int groupID)
     {

     List<FileIDResult> returnList = null;

     using (var db = new PgContext())
        {
        IQueryable<FileIDResult> query = null;
        if (deviceID > 0)
           {
           var queryForID =
               from b in db.device_files
               where b.device_id == deviceID
               select new FileIDResult
               {
                  file_id = b.file_id,
                  file_description = b.file_description,
                  company_deployed_files  =  (from o in db.company_deployed_files
                                                where o.file_id == b.file_id
                                                select o).FirstOrDefault(),
                  IsDeviceFile = true
               };

           if (query == null)
              {
              query = queryForID;
              }
           else
              {
              // query should always be null here
              }
           }


        if (groupID > 0)
           {
           var queryForfileID =
            from b in db.group_files
            where b.group_id == groupID
            select new FileIDResult
            {
               file_id = b.file_id,
               file_description = b.file_description,
               company_deployed_files  = (from o in db.company_deployed_files
                                             where o.file_id == b.file_id
                                             select o).FirstOrDefault(),
               IsDeviceFile = false

            };

           if (query != null)
              {
              // query may or may not be null here
              query = query.Union(queryForfileID);
              }
           else
              {
              // query may or may not be null here
              query = queryForfileID;
              }
           }

       //This query.ToList(); is failing -  "The method or operation is not implemented."
       returnList = query.ToList ();
        }

     return returnList;
     }

编辑2 ToList抛出异常。

我98%确定这是行:company_deployed_files =(来自db.company_deployed_files中的o,其中o.file_id == b.file_id选择o).FirstOrDefault()

结束编辑2

0 个答案:

没有答案