引用另一个表c#linq

本文关键字:c#linq 另一个 引用 | 更新日期: 2023-09-27 18:00:30

我想使用一个表中的id来列出wpf中另一个表的标题,所以我这样做了:

 var q = from a in context.associations
                select a;
        associations = q.ToList();
        associationViewSource.Source = associations;
        foreach (var item in q)
        {
            var qTitles = from b in context.textbooks
                          where b.Id == item.book_id
                          select b.Title;

            assocListView.ItemsSource = qTitles.ToList();
        }

在我制作信息主体的代码的第一部分中,它列出了关联表中的所有信息,之后我想列出课本表中的相关标题,这就是我向assocListview添加项目的地方,但它当然失败了,数据也没有显示,也没有出现错误。我希望我已经足够清楚了。请帮助

引用另一个表c#linq

您可以通过联接获得具有associationsTitles的列表。。。

var qTitles = context.textbooks
                    .Join(context.associations,
                          b => b.Id,
                          a => a.book_id,
                          b => b.Title)
                    .ToList();

不过,代码的意图并不明确,因为assocListView.ItemsSource在循环的每次迭代中都被赋值。那是个虫子吗?

由于每次循环都要设置assocListView.ItemsSource,因此结果列表将具有上次查询的结果。

如果你想要一个所有相关标题的列表,你可以通过一个查询获得:

var titles = 
    from a in context.associations
    join b in context.textbooks on a.book_id equals b.Id
    select b.Title;
assocListView.ItemsSource = titles.ToList();

这将返回链接到关联表中任何记录的每个标题,没有特定的顺序,带有重复项等。通常,提取更多信息以使其更可用是有意义的。例如,定义一个结构来保存相关的标题:

public struct AssocTitle
{
    public int AssocID;
    public int BookID;
    public string Title;
}

然后像这样查询:

var titles = 
    from a in context.associations
    join b in context.textbooks on a.book_id equals b.Id
    select new AssocTitle { AssocID = a.Id, BookID = b.Id, Title = b.Title };

然后,当你点击列表视图中的东西时,你可以找到哪本书和哪个关联,即使你有很多相同标题的关联。