引用另一个表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添加项目的地方,但它当然失败了,数据也没有显示,也没有出现错误。我希望我已经足够清楚了。请帮助
您可以通过联接获得具有associations
的Titles
的列表。。。
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 };
然后,当你点击列表视图中的东西时,你可以找到哪本书和哪个关联,即使你有很多相同标题的关联。