C# 使用lambda表达式选择对象数组中变量的所有不同值
我有一个属性为C# 使用lambda表达式选择对象数组中变量的所有不同值,c#,lambda,C#,Lambda,我有一个属性为ProductId的对象数组。我想使用lambda表达式来选择对象数组产品中ProductId的所有不同值 这是我的产品 var products = Database.SqlQuery<StructuredProduct>("query").ToArray(); 关于如何在products数组中使用Lambda表达式来获取productid的所有不同值,您有什么想法吗 var productIds= products.Select(p => p.Product
ProductId
的对象数组。我想使用lambda表达式来选择对象数组产品中ProductId
的所有不同值
这是我的产品
var products = Database.SqlQuery<StructuredProduct>("query").ToArray();
关于如何在products
数组中使用Lambda表达式来获取productid
的所有不同值,您有什么想法吗
var productIds= products.Select(p => p.ProductId).Distict();
但直接在数据库上执行此操作可能更好,因为它是“query”
sql命令的一部分 使用LINQ方法
我只使用查询理解语法执行过GroupBy操作。如果您这样做,将
/按
/分组到
,则分组到的对象具有一个名为键
的属性。将包含您的“productid”`
var results = from product in products
group product by ProductId
into individualProducts
select individualProducts;
var productsArray = individualProducts.Select(p => p.Key).ToArray();
项目individualProducts
集合每个项目都有一个键
和一个具有相同productid的物品集合
如果直接从数据库中执行此操作,那么所有操作都将很好地组合到一个SQL语句中,在代码到达.ToArray()
时执行该语句。这看起来有点可怕,就像数据库一样。SqlQuery()
方法将迫使您编写极易受SQL注入问题影响的代码。我希望有一种机制可以接受与sql命令字符串分离的查询参数数据。17秒:)。@JoelCoehoorn我使用优化编译:on:Dvar productIds=products.GroupBy(p=>p.ProductId)。Select(group=>group.First()).Select(p=>p.ProductId.ToArray();也会起作用。但是上面的解决方案更好这工作很完美谢谢!我在最后添加了一个.ToArray(),这正是我所需要的。不幸的是,由于其他一些限制,我不能将其包含在“query”
sql命令中。@LRID添加.ToArray()通常是个坏主意。相反,将变量定义为IEnumerable@JoelCoehoorn永远不要使用ToArray()
是一个更糟糕的主意,因为如果知道惰性序列将被完全枚举,就不应该让它们被分配。其结果是重复地重新评估您的收集,并冒着副作用的风险(我在使用LINQ生成类实例时意外地创建了访问计数器),从而将事情保持在垃圾收集器的范围内。像Sort()
和Distinct()
这样的操作通常强制进行完全求值,因为如果不完全扫描集合1中的值,您如何知道该值是否不在集合2中?
var productIds = products.Select(p => p.ProductId).Distinct();
var results = from product in products
group product by ProductId
into individualProducts
select individualProducts;
var productsArray = individualProducts.Select(p => p.Key).ToArray();