如果通过sql查询完成,我有一个简单的要求。 我有表A,它是ID,Name的类别 表b是categoryItems,它具有A CategoryId,Name的外键。 我使用linqdatasource和简单的select语句来显示表A中的数据。
select * from A (simple)
我现在有一个要求,我想首先“不显示”类别,没有任何与之相关的项目。 e(从B中选择计数(*),其中CategoryId =“”)> 0
通过修改sql语句非常容易,想知道是否可以通过使用任何开箱即用的linq功能访问外键关系数据并应用验证来完成。
热衷于此!..
非常感谢!
答案 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 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());
}
答案 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