无法在转换后的查询中访问表(普通 SQL 到 LINQ)
Posted
技术标签:
【中文标题】无法在转换后的查询中访问表(普通 SQL 到 LINQ)【英文标题】:Cannot access Table in converted query (plain SQL to LINQ) 【发布时间】:2011-05-23 09:04:39 【问题描述】:我正在尝试将此有效的 SQL 查询转换为 LINQ 查询 (EF)
但在 LINQ 查询中,我无法进入类别数据表。 这是我的工作 SQL 查询:
SELECT cosmetics.brand, cosmetics.product, cosmetics.size, cosmetics.price, cosmetics.sale_type, cosmetics.description, cosmetics.date, cosmetics.company_id, cosmetics.category, cosmetics.[male-female], company.company_site
FROM cosmetics INNER JOIN company ON cosmetics.company_id = company.company_id
WHERE (cosmetics.date >= GETDATE())
AND (cosmetics.[male-female] = N'female')
AND (cosmetics.category = N'cosmetics_perfumes')
ORDER BY cosmetics.brand, cosmetics.product, cosmetics.size, cosmetics.price"
这工作得很好:
var female = (from c in db.cosmetics
.Where(v => v.date > DateTime.Now)
.Where(d => d.male_female == "female")
.Include("company")
select c);
return View(female.ToList());
【问题讨论】:
尝试使用 LINQPad,因为您会发现它在这种情况下非常宝贵。 并找到LINQpad here 什么是“分类数据表”?在您工作的 sql 查询中,只使用了两个表:化妆品和公司。里面好像没有“分类数据表”。 【参考方案1】:var q =
from cos in oc.cosmetics
join com in oc.company on cos.company_id equals com.company_id
where cos.date >= DateTime.Now
&& cos.male_female == "female"
&& cos.category == "cosmetics_perfumes"
orderby cos.brand, cos.product, cos.size, cos.price
select new cos, com.company_site ;
【讨论】:
谢谢,使用它我在我看来得到这个错误:传递到字典中的模型项的类型是'System.Collections.Generic.List1[<>f__AnonymousType1
2[Sr_D.Models.cosmetic ,System.String]]',但此字典需要类型为“System.Collections.Generic.IEnumerable`1[Sr_D.Models.cosmetic]”的模型项。我的观点是使用这个模型:@model IEnumerable以上是关于无法在转换后的查询中访问表(普通 SQL 到 LINQ)的主要内容,如果未能解决你的问题,请参考以下文章
访问 2000 - 强制转换规范 (#0) 的无效字符值 - 访问 SQL