【问题标题】:Return List from multiple search in C#从 C# 中的多个搜索返回列表
【发布时间】:2018-07-13 17:10:59
【问题描述】:

我有 TextBox,用户可以在其中输入许多数字(每行 1 个)。

然后,我正在查询具有这些数字的子表。

这些数字是主表中的外键。

主表 - tblOrders

子表 - tblOrderItems(外键为 OrderID)

public class OrderItems
{
    public int ID { get; set; }
    public string Order { get; set; }
    public string Status { get; set; }
    public DateTime DataC { get; set; }
    public int Item { get; set; }
}

public IEnumerable<OrderItems> LoadItems()
{
    List<OrderItems> list = new List<OrderItems>();
    string[] textArray = TxtOrder.Text.Split(new string[] { ronment.NewLine }, StringSplitOptions.None);
    foreach (var text in textArray.Distinct())
    {
        var ctx = new DbContext();
        var query = (from p in ctx.tblOrderItems.AsQueryable()
                     join m in ctx.tblOrders on p.RegistID equals m.RegistID
                     where m.Order.Contains(text)
                     select new OrderItems
                     {
                         ID = p.RegistTID,
                         Order = m.Order,
                         Status = p.Status,
                         DataC = m.DataC,
                         Item = p.Item
                     }).FirstOrDefault();
        list.Add(query);
    }
    return list;
}

问题:在主键中这样查询,我得到正确的值,因为我在 TxtOrder 文本框中添加的每个项目只有 1 条记录。

但是我正在查询 tblOrderItems 并且 tblOrderItems 有许多与 tblOrders 中的 1 条记录相关的记录,我无法将它们全部放到我的 DataGridView 中。

【问题讨论】:

  • 为什么是m.Order.Contains(text)?为什么不m.Order == text?如果你能做到,那么你可以更进一步textArray.Contains(m.Order)
  • 谢谢,但这没有帮助!我需要改变 FirstOrDefault() 的东西,让我的所有记录不仅是第一个!如果我删除 FirstOrDefault() 我会在 list.Add(query) 中得到错误-> 无法将通用列表转换为 OrderItems...
  • 你现在不是用.FirstOrDefault()明确地只抓取1个
  • 删除FirstOrDefault 并尝试list.AddRange(query)
  • 完美!谢谢。

标签: c#


【解决方案1】:

要获取项目而不是项目,您需要:

使用ToList 代替FirstOrDefaultAddRange 代替Add

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 2022-10-05
    • 2015-09-11
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多