我在这里遇到了一些问题。我有一个Linq语句,用于过滤数据库中的对象列表。
假设我有以下元素列表(每个'{...}'代表列表中的一个对象):
{id: 288, id_price_table: 1},
{id: 295, id_price_table: 1},
{id: 295, id_price_table: 2},
{id: 295, id_price_table: 3}
我有两个参数,一个是'StandardPriceTable',另一个是'CurrentUserPriceTable'。在我的例子中,这些参数如下:
Int32 StandardPriceTable = 1;
Int32 CurrentUserPriceTable = 2;
现在我想要实现的是:如果id是唯一的(并且因此属于StandardPriceTable),则创建一个带有条件的where子句,它将当前对象返回到列表。
但是如果相同的ID属于很多id_price_table,那么它应该验证哪个对象属于CurrentUserPriceTable,只返回 该对象,而不包括具有相同ID的其他对象。
我知道我可以使用foreach语句实现这一点,但这会导致我想暂时避免的数据库查询。
根据我告诉的条件,查询的结果将等于: 使用以下内容 IQueryable :
{id: 288, id_price_table: 1},
{id: 295, id_price_table: 2}
答案 0 :(得分:1)
怎么样:
var result = from item in Items
group item by item.Id into g
select g.Single(i => g.Count() == 1 ?
true :
i.Id_price_table == CurrentUserPriceTable);
或使用lambdas:
var result2 = Items.GroupBy(i => i.Id)
.Select(g => g.Single(i => g.Count() == 1 ?
true :
i.Id_price_table == CurrentUserPriceTable));