【问题标题】:LINQ pull records from a database where string list is from a modelLINQ 从数据库中提取记录,其中字符串列表来自模型
【发布时间】:2016-02-12 21:55:40
【问题描述】:

我有一个包含 ID 的字符串数据库。我需要将该列表传递给 LINQ 查询,以便提取正确的记录。

model.SelectedDealers = db.dealers.Any(a => a.sdealer_name.Contains(UserToEdit.UserViewAccesses.Select(s => s.ViewReferenceNumber)));

SelectedDealers 的类型为 dealers

ViewReferenceNumber 应该是strings which should match sdealer_name 的列表

所以基本上我试图找到所有dealers whos sdealer_name 与我在UserToEdit.UserViewAccesses 中的sdealer_names 列表匹配

我尝试过移动部件并将它们切换到不同的位置,但似乎无法解决这个问题。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework linq lambda


    【解决方案1】:

    Any() 只是一个布尔值,指示是否有任何结果。它实际上并不返回结果。

    如果我正确理解您的要求,那么这可能会起作用:

    var dealerNames = UserToEdit.UserViewAccesses.Select(s => s.ViewReferenceNumber).ToList();
    model.SelectedDealers = db.dealers.Where(a => dealerNames.Contains(a.sdealer_name));
    

    【讨论】:

    • 这给了我错误Only primitive types of enumeration types are supported in this context. Unable to create a constant value of type 'dap.models.UserViewAccess'
    • 是的,我认为你明白我想要做什么。我只是在.Any...上做一个太空案...
    • 我已经编辑了我的答案。试试看。我知道在 Linq 查询中使用 Contains() 仅适用于非常有限的用途。但我很确定我以前用过它。
    • 当时没有错误,但没有返回任何结果。我会继续玩它的。 2 个结果存在于dealerNames 我很确定这是我需要的。
    • 这是一个开始。很高兴我能帮助你。 :)
    【解决方案2】:

    所以本质上我是想找到所有的经销商 sdealer_name 与我的 sdealer_name 列表相匹配 UserToEdit.UserViewAccesses

       var dealersthatmatched = (from d in UserToEdit.UserViewAccesses.sdealer_names
                                 where d == sdealer_name
                                 select d).ToList()
    

    希望我可以发表评论,但由于我没有足够的代表,我不能。我希望我能更好地理解这个要求,但你似乎已经准备好并且能够尝试一些东西,所以也许你觉得这很有用。

    【讨论】:

    • 感谢您抽出宝贵时间提供答案。它缺少一些关键的东西才能工作,即,它必须进入 db.dealers 并找到所有经销商名称在我的 UserToEdit 列表中的经销商。如果您可以制作一个有效的 LINQ 查询版本,我肯定会投赞成票。并且不要担心无法及时发表评论。 :) 如果我需要在 OP 中添加一些内容以使其更清晰,请告诉我。
    • 嗯,试试这个或修改这个适合你的列表。列表 经销商列表 = 新列表();经销商列表 = db.dealers.Where(i=>i.sdealer_name == UserToEdit.Any()).ToList();我是我的手机,所以写代码有点危险。
    • 我认为这会使它起作用,尽管我没有测试它只是从上面的答案中猜测有效。我倾向于编写比 LINQ 更多的 lambda。 var dealerNames = UserToEdit.UserViewAccesses.Select(s => s.ViewReferenceNumber).ToList(); model.SelectedDealers = (from d in db.dealers where dealerNames.contains(d.sdealer_name) select d);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多