【问题标题】:Could not find an implementation of the query pattern for source type 'Join'找不到源类型“加入”的查询模式的实现
【发布时间】:2015-02-24 11:37:43
【问题描述】:

ASP.net 和 MVC 的新手,到目前为止一切都很好。今天去数据库了,什么!?我很困惑,不确定我在哪里出错了。我正在尝试使用 LINQ to SQL(至少,我认为我是..)。让我给你一个数据库的场景,以帮助你更好地理解代码在做什么。

我们有三个表,Inventory、Location 和 Equipment。 Inventory 包含库存、名称等的所有数据。Location 包含 LocationID 和 LocationName,而 Equipment 包含 EquipmentID 和 EquipmentName。 Inventory 也包含 EquipmentID 和 LocationID。

我想显示 Station Reference、Equipment(EquipmentID 变成 EquipmentName)和 Location(LocationID 变成 EquipmentName)。

我有以下代码:

InventoryDataContext context = new InventoryDataText();

public ActionResult Index()
{
    IList<InventoryModel> inventoryList = new List<InventoryModel>();
    var query = from tblInventory in context
                join tblEquipment in context
                on tblInventory.EquipmentID equals tblEquipment.EquipmentID
                join tblLocation in context
                on tblInventory.LocationID equals tblLocation.LocationID
                select new InventoryModel {
                    InventoryID = tblInventory.InventoryID,
                    StationReference = tblInventory.StationReference,
                    EquipmentID = tblEquipment.EquipmentID,
                    EquipmentName = tblEquipment.EquipmentName,
                    LocationID = tblLocation.LocationID,
                    LocationName = tblLocation.LocationName
                };

}

除了一个错误之外,一切似乎都很好,那就是:

找不到源类型“InventoryDataContext”的查询模式的实现。未找到“加入”。

这是似乎给出错误的第一个上下文 (var query = from tblInventory in context)。

【问题讨论】:

    标签: c# sql linq linq-to-sql


    【解决方案1】:

    您的语法不正确。您需要指定上下文中要使用的表。

    var query = from inv in context.tblInventory 
                join eq in context.tblEquipment
                  on inv .EquipmentID equals eq .EquipmentID 
    

    【讨论】:

    • 这样做给了我“'InventoryDataContext' 不包含 tblInventory 的定义,并且找不到接受第一个参数类型 'InventoryDataContext' 的扩展方法 tblInventory(您是否缺少指令或程序集引用? )
    • 有时 linq 是表名的复数形式。
    • 这不会导致“InventoryID = tblInventory.InventoryID”出现错误吗?因为这是唯一出现错误的行。
    • 啊,我明白你的意思了 :)。遇到另一个问题,但会对其进行研究,看看它是否相关,如果是,则发布解决方案并将其设置为已回答。
    • 试图研究这个问题,但无济于事。尝试按照错误消息的说明进行操作,从字面上看,但仍然没有用。 '名称 tblInventories 不在 'equals' 左侧的范围内。考虑交换 'equals' 两边的表达式。这就是它说“在 tblInventories.EquipmentID 上等于 tblEquipment.EquipmentID”的地方。我把它换了一轮,所以 tblEquipment.EquipmentID 首先出现,但它只是将错误更改为右侧,而不是左侧。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多