访问外键数据 linq
本文关键字:linq 数据 访问 | 更新日期: 2023-09-27 18:22:06
如果通过sql查询完成,我有一个简单的要求。我有表A,它是带有ID,名称的类别表 b 是具有 A 类别 Id,名称的外键的类别项。我正在使用带有简单选择语句的 linqdata source 来显示表 A 中的数据。
select * from A (simple)
我现在有一个要求,我想首先"不显示"没有任何与之关联的项目的类别,即 e(从 B 中选择 count(*(,其中 CategoryId="(>0
通过修改 sql 语句非常容易,想知道是否可以通过使用任何开箱即用的 linq 功能访问外键关系数据并应用验证来完成。
只是热衷于它..
谢谢吨!
您想
在Category.CategoryItems
上使用 Any()
方法
Any()
如果Count > 0
,则返回true
,如果Count == 0
,则返回false
// Select only the Categories which have at least one CategoryItem.
IEnumerable<Category> categoriesWithItems = Context.Categories.Select(x => x.CategoryItems.Any());
对于linqdatasource
,您想使用Selecting event handler
.MSDN.
aspx:-
<asp:LinqDataSource ID="LinqDataSource1"
runat="server"
ContextTypeName="MyDataContext"
OnSelecting="LinqDataSource1_Selecting">
</asp:LinqDataSource>
方法:-
public void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Result = categoriesWithItems = Context.Categories.Select(x => x.CategoryItems.Any());
}
你可以试试这个
var categories = (from c in category select c).Select<Category>(x => x.categoryItems.Count() > 0);
这依赖于您的对象,并且可以很好地解决问题。
或者,您也可以使用Where
等。
有关 Linq 运算符和扩展器的良好解释,请参阅此链接