我想使用一个表中的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中添加项目的地方,但它当然会失败,数据不会显示,也不会抛出任何错误。我希望我很清楚。 请帮忙
答案 0 :(得分:1)
您可以获得Titles
的{{1}}列表,其中包含associations
加入...
var qTitles = context.textbooks
.Join(context.associations,
b => b.Id,
a => a.book_id,
b => b.Title)
.ToList();
代码的意图并不清楚,因为在循环的每次迭代中都分配了assocListView.ItemsSource
。这是一个错误吗?
答案 1 :(得分:0)
由于您通过循环设置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 };
然后,当您单击列表视图中的内容时,您可以找出哪些书和哪个关联,即使您有相同标题的许多关联。