Tag: linq

创建n * m值的所有组合

假设我有一个IEnumerable<IEnumerable>的数据结构,如下所示: { { A, B } { 1, 2, 3 } { Z } } 外部数组可以包含任意数量的内部数组。 并且内部数组可以各自独立地包含任意数量的元素。 并且为了简单起见,假设没有数组是空的。 我想将它转换为IEnumerable<IEnumerable>如下所示: { { A, 1, Z }, { A, 2, Z }, { A, 3, Z }, { B, 1, Z }, { B, 2, Z }, { B, 3, Z } } 其中包含原始结构中值的每个组合。 因此,每个内部数组中的每个元素都通过索引映射到原始外部数组中的元素/数组。 在C#中最简单的方法是什么?

在LINQ语句中使用async / await时实际发生了什么?

以下片段编译,但我希望它等待任务结果,而不是给我一个List<Task> 。 var foo = bars.Select(async bar => await Baz(bar)).ToList() 正如这里指出的,你需要使用Task.WhenAll : var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList(); await Task.WhenAll(tasks); 但是评论指出不需要在Select()内部进行async和await : var tasks = foos.Select(foo => DoSomethingAsync(foo)).ToList(); 这里有一个类似的问题,有人试图在Where()使用异步方法。 因此,在LINQ语句中async和await是合法的语法,但是它什么都不做或者它是否具有某种用途?

在LINQ语句中使用部分类属性

我试图找出做我认为很容易的最佳方法。 我有一个名为Line的数据库模型,它代表发票中的一行。 看起来大致如此: public partial class Line { public Int32 Id { get; set; } public Invoice Invoice { get; set; } public String Name { get; set; } public String Description { get; set; } public Decimal Price { get; set; } public Int32 Quantity { get; set; } } 此类是从db模型生成的。 我有另一个类,增加了一个属性: public partial […]

LINQ查询 – 数据聚合(Group Adjacent)

我们来一个叫做Cls的课: public class Cls { public int SequenceNumber { get; set; } public int Value { get; set; } } 现在,让我们使用以下元素填充一些集合: 序列 数值 ======== ===== 1 9 2 9 3 15 4 15 5 15 6 30 7 9 我需要做的是枚举序列号并检查下一个元素是否具有相同的值。 如果是,则汇总值,因此,所需的输出如下: 序列序列 号码 从价值到价值 ======== ======== ===== 1 2 9 3 5 15 6 6 […]

C#对象排名,多个标准

我正在为我编写的局域网方网站构建一个允许使用Round Robin锦标赛的插件。 一切进展顺利,但我对排名超过两个标准的最有效方法有一些疑问。 基本上,我想要以下排名布局: Rank Wins TotalScore PersonE 1 5 50 PersonD 2 3.5 37 PersonA 2 3.5 37 PersonC 4 2.5 26 PersonB 5 2.5 24 PersonF 6 0 12 在SQL服务器中,我会使用: SELECT [Person], RANK() OVER (ORDER BY Wins DESC, TotalScore DESC) [Rank], [Wins], [TotalScore] 现在,我只有List,Dictionary等可以使用 特别: Dictionary wins = new Dictionary(); Dictionary score = […]

有一种简单的方法可以将(lambda表达式)字符串解析为Action委托吗?

我有一个方法,根据传递给它的动作委托改变“帐户”对象: public static void AlterAccount(string AccountID, Action AccountAction) { Account someAccount = accountRepository.GetAccount(AccountID); AccountAction.Invoke(someAccount); someAccount.Save(); } 这按预期工作…… AlterAccount(“Account1234”, a => a.Enabled = false); …但是现在我想尝试做的是这样的方法: public static void AlterAccount(string AccountID, string AccountActionText) { Account someAccount = accountRepository.GetAccount(AccountID); Action AccountAction = MagicLibrary.ConvertMagically<Action>(AccountActionText); AccountAction.Invoke(someAccount); someAccount.Save(); } 它可以像以下一样使用: AlterAccount(“Account1234”, “a => a.Enabled = false”); 禁用帐户“Account1234”。 我已经看过linq动态查询库 ,它似乎或多或少地做了我想要的但是对于Func类型的委托,我对表达式树等的了解还不够好,无法弄清楚如何实现我的目标想。 有没有一种简单的方法可以做我想要的,或者我是否需要正确学习表达式并编写大量代码? (我想这样做的原因是允许从powershell脚本中批量更新帐户对象的简单方法,其中用户可以指定lambda表达式来执行更改。)

LINQ:添加RowNumber列

如何修改下面的查询以包含行号列(即:基于一个结果的索引)? var myResult = from currRow in someTable where currRow.someCategory == someCategoryValue orderby currRow.createdDate descending select currRow; 编辑1:我正在寻找{idx, col1, col2…col-n}而不是{idx, row} 。 EDIT2:行号应对应于结果行而不是表行。 EDIT3:我将这些结果DataBind到GridView 。 我的目标是向GridView添加行号列。 也许一种不同的方法会更好。

linq distinct或由多个属性分组

如何使用c#和Linq从下一个列表中获取result : var pr = new List() { new Product() {Title=”Boots”,Color=”Red”, Price=1}, new Product() {Title=”Boots”,Color=”Green”, Price=1}, new Product() {Title=”Boots”,Color=”Black”, Price=2}, new Product() {Title=”Sword”,Color=”Gray”, Price=2}, new Product() {Title=”Sword”,Color=”Green”,Price=2} }; Result : {Title=”Boots”,Color=”Red”, Price=1}, {Title=”Boots”,Color=”Black”, Price=2}, {Title=”Sword”,Color=”Gray”, Price=2} 我知道我应该使用GroupBy或Distinct ,但要了解如何获得所需 List result = pr.GroupBy(g => g.Title, g.Price).ToList(); //not working List result = pr.Distinct(…); 请帮忙

LINQ并设置差异

我有两个集合a和b 。 我想计算a或b的项集,但不能同时计算(逻辑异或)。 使用LINQ,我可以想出这个: IEnumerable Delta(IEnumerable a, IEnumerable b) { return a.Except (b).Union (b.Except (a)); } 我想知道是否还有其他更有效或更紧凑的方法来产生两个集合之间的差异。 编辑1:Jon Skeet发布了第一个解决方案,它不依赖于HashSet保留项目的顺序。 我想知道是否还有其他方法可以保留输出中a和b的顺序。

将字符串解析为C#lambda Func

有没有办法将lambda的字符串表示转换为lambda Func? Func func = Parse(“product => product.Name.Length > 0”); 我尝试了动态LINQ但它没有按预期工作 – 例如它不期望lambda语法=>。 答案摘要: 编写我自己的C#编译器 – 非常有趣 启动外部编译器(如csc.exe) – 非常慢 使用DLINQ – 正如我所说,我不知道它如何解析lambda表达式 为什么我需要这个:因为没有办法将lambdas传递给自定义属性,比如 [Secure(role => role.CanDoThis && role.AllowedCount > 5)] 因此,作为一种解决方法,我想将lambda作为字符串传递:“role => role.CanDoThis && role.AllowedCount> 5”。 但似乎我必须像这样使用DLINQ:“CanDoThis && AllowedCount> 5” – 因为这是它理解的语法。 但我的问题是关于真正的lambdas,我在询问时已经使用过DLINQ了。