访问外键数据linq

时间:2013-07-11 08:52:58

标签: c# asp.net linq linqdatasource

如果通过sql查询完成,我有一个简单的要求。 我有表A,它是ID,Name的类别 表b是categoryItems,它具有A CategoryId,Name的外键。 我使用linqdatasource和简单的select语句来显示表A中的数据。

select * from A (simple)

我现在有一个要求,我想首先“不显示”类别,没有任何与之相关的项目。 e(从B中选择计数(*),其中CategoryId =“”)> 0

通过修改sql语句非常容易,想知道是否可以通过使用任何开箱即用的linq功能访问外键关系数据并应用验证来完成。

热衷于此!..

非常感谢!

2 个答案:

答案 0 :(得分:2)

您想在Any()

上使用Category.CategoryItems方法

Any()如果true则返回Count > 0,如果false

则返回Count == 0
// Select only the Categories which have at least one CategoryItem.
IEnumerable<Category> categoriesWithItems = Context.Categories.Select(x => x.CategoryItems.Any());

对于linqdatasource,您要使用Selecting event handlerMSDN

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());    
}

答案 1 :(得分:0)

你可以试试这个

var categories = (from c in category select c).Select<Category>(x => x.categoryItems.Count() > 0);

这取决于你的对象,并且可以正常使用。

或者您也可以使用Where等。

See this link for a good explanation on Linq operators and extenders