访问外键数据 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 功能访问外键关系数据并应用验证来完成。

只是热衷于它..

谢谢吨!

访问外键数据 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 运算符和扩展器的良好解释,请参阅此链接