【发布时间】: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#