【发布时间】:2019-06-25 16:58:20
【问题描述】:
使用具有只读数据库和没有主键的表的客户端。我试图将一个表“项目”(有一个主要)与“图片”[无键]进行比较,以便从有图片的“项目”中获得结果。每个项目是否在“图片”中都有图片。我无法在 SQL 中编辑数据库本身。
我的最终目标是返回只有图片的结果。
我尝试使用原始 SQL 查询,然后将其转换为 IQueryable,但这不允许我使用其他参数搜索项目,而且速度非常慢。 (“item”表中可能有 75+ 列和 10,000+ 总项目)我只能弄清楚如何使用带有 'SELECT *' 的查询。
控制器:
entities db = new entities();
var results = (from s in db.items
select s);
...
var Pics = db.Database.SqlQuery<Item>(
"SELECT * FROM dbo.Pics
AS p JOIN dbo.item
AS i ON
i.item = p.item
WHERE p.Pic = 'Yes'").AsQueryable();
...
results = Pics;
...
return View(results);
【问题讨论】:
-
我不明白
i.item = p.item。这是item表中item的主键和pics表中item的外键吗? -
item 的主键。如果表格设计正确,它将是图片下项目的外键。但是我正在使用一个设计不正确的表,所以我认为它在技术上不是外键,尽管我试图这样对待它(两列的数据相同)
-
所以应该非常简单地转换为 LINQ。也许我的SQL to Linq Recipe 可以帮到你?
-
我的问题是我不确定如何在不使用 SQL 查询的情况下访问实体框架中的 Pics 表,因为它没有键。 Pics 表没有在我的 edmx 中编译。有没有办法将 LINQ 与不在模型中的表一起使用?
-
edmx文件是怎么生成的,导致Pics数据库或者Pics表不生成?是否使用 Visual Studio 和设计器视图生成?
标签: c# sql-server asp.net-mvc entity-framework linq