C# 用linq语法编写sql查询

C# 用linq语法编写sql查询,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,我正在尝试用linq语法编写以下查询,但我能做到。我在标记行错误处收到错误与“System.Collections.Generic.List.ContainsAnonymousType1”的最佳重载方法匹配的方法有一些无效参数 . 我怎样才能写好它 sql: 林克: var query = (from t in db.TableOrderTbls.AsQueryable() join r in db.RestorantTbls o

我正在尝试用linq语法编写以下查询,但我能做到。我在标记行错误处收到错误与“System.Collections.Generic.List.ContainsAnonymousType1”的最佳重载方法匹配的方法有一些无效参数 . 我怎样才能写好它

sql:

林克:

            var query = (from t in db.TableOrderTbls.AsQueryable()
                     join r in db.RestorantTbls on t.RestorantID equals r.RestorantID
                     join res in db.ReservationTbls on t.TableID equals res.TableID
                     where (resv.RseservationDate == res.ReservationDate && resv.RestorantName == r.RestorantName) && ((Convert.ToInt32(resv.ResStartTime) < Convert.ToInt32(res.ResStartTime) &&Convert.ToInt32(resv.ResEndTime) < Convert.ToInt32(res.ResStartTime))||((Convert.ToInt32(resv.ResStartTime) > Convert.ToInt32(res.ResEndTime) && Convert.ToInt32(resv.ResEndTime) > Convert.ToInt32(res.ResEndTime))))
                     select new {r.RestorantName, r.RestorantID, t.TableID, t.TableType}).ToList();

        var q = from t in db.TableOrderTbls.AsQueryable()
                where query.Contains(t.TableID) // ERROR LINE
                select t;

您的查询对象是以下列表:

select new {r.RestorantName, r.RestorantID, t.TableID, t.TableType}
但您正在尝试查看它是否包含:

TableOrderTbls.TableId
匿名{r.RestorantName,r.RestorantID,t.TableID,t.TableType}与TableOrderTbls.TableID的类型不同

在将匿名类型映射到TableOrderTbls.TableId时,需要更加具体

胡乱猜测,试试这个:

where query.Any(x => x.TableID == t.TableID)

为什么不在你的问题中加入完整的错误细节来帮助那些想帮助你的人呢。您的选择返回一个新的匿名类型,包含4个属性。您将其视为在对query.Containst.TableID的调用中仅包含1。按原样使用代码,您需要将匿名类型传递给Contains方法。因此,它正在编译、运行且不返回错误。你确定数据是好的并且应该返回一些东西吗?放置一个断点并检查查询结果,然后也中断第二个不带where的查询,列出它并检查。确保它甚至匹配。它正在返回NotSupportedExceptions最初您尝试我的答案时,它返回null,但现在它正在返回不受支持的异常?什么改变了?我不知道,我只是得到了NotSupportedException和任何函数导致的。使用Eric的代码并从第一个查询中删除.ToList。
where query.Any(x => x.TableID == t.TableID)