无法在转换后的查询中访问表(普通 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__AnonymousType12[Sr_D.Models.cosmetic ,System.String]]',但此字典需要类型为“System.Collections.Generic.IEnumerable`1[Sr_D.Models.cosmetic]”的模型项。我的观点是使用这个模型:@model IEnumerable 我在这里做错了什么? 好的,非常感谢,它看起来像这样工作:var female=from c in db.cosmetics .Where(s=>s.date>DateTime.Now) .Include("company" ) .Where(z=>z.category=="cosmetics_perfumes").Where(x=>x.male_female=="female") 选择 c;

以上是关于无法在转换后的查询中访问表(普通 SQL 到 LINQ)的主要内容,如果未能解决你的问题,请参考以下文章

将 Access 交叉表查询转换为 SQL Server

访问 2000 - 强制转换规范 (#0) 的无效字符值 - 访问 SQL

SQL Server 2005中的分区表:将普通表转换成分区表

日期转换问题 MS 访问 SQL Server

如何将访问查询转换为MS SQL

无法访问 sql 中查询的表值参数