【问题标题】:Cannot use an entityset inside my linq to sql query无法在我的 linq to sql 查询中使用实体集
【发布时间】:2014-03-24 21:42:21
【问题描述】:

当我尝试查询数据库以检索选定船员的活动时,我给出“Loca Sequence Error”

这是代码:

private Lst_active as new entityset(of Activity)   
private crw_list as new entityset(of Crew)

checklistbox.Items.addrange(Dbase.Crew)

然后我从复选框中的所有工作人员中进行选择,并将选定的工作人员插入 Crew 的实体集中以供进一步使用。

crw_list.addrange(Checkedlistbox.checkeditems)

Lst_active.AddRange(From x In DBase.Stored_Activities Join z In crw_list On x.EMP_NO  Equals z.EMP_NO
                    Select x)

有什么办法吗?还是我做错了?

【问题讨论】:

    标签: sql vb.net linq sequence local


    【解决方案1】:

    你还没有说你的模型是什么样子的,但是下面的概念应该可以工作:

    Dim active = (From x In DBase.Stored_Activities
                  Join z In DBase.Stored_Crews On x.EMP_NO  Equals z.EMP_NO
                  Select x).ToList()
    

    更新

    如果您有一个本地内存集合,并且您需要与该集合中的字段匹配的项目,请改用Contains

    From x in DBase.StoredActivities
    Where localList.Contains(x.EMP_NO)
    select x
    

    您的列表应该只包含加入列*,在这种情况下应该来自crw_list.Select(Function(x) x.EMP_NO)

    【讨论】:

    • 是的,但我需要使用本地序列。我要编辑问题。
    • 我不知道是否有任何其他方法可以使用本地列表而不是实体集在查询中使用。
    • 检查我的更新。您可能应该选择Contains
    【解决方案2】:

    我找到了解决方案,只是改变了查询的两个部分。

         From z In crw_list Join x In DBase.Stored_Activities  On x.EMP_NO  Equals z.EMP_NO
                    Select x
    

    它将查询从 linq 更改为 sql 到 linq 到对象,其中包含 sql join 查询。

    【讨论】:

    • 这个把整个表放到内存中,作为内存查询执行join,效率远不如DB。
    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多