Tag: linq

Linq集团按季度分组

有没有可能做一个linq小组和分组几个季度,即Q1 1月到apr等等

使用LINQ在C#中使用MasterMind评分算法

我正在寻找一种优雅的方法来计算C#中MasterMind游戏的猜测得分,最好是使用LINQ。 在MasterMind中,代码生成器使用数字1到6生成4位数的密码。可以多次使用数字。 例如,密码是: int[] secret = { 1, 2, 3, 1 }; 代码破解者试图通过猜测来破解密码。 在这个例子中,猜测是: int[] guess = { 1, 1, 2, 2 }; (代码和猜测现在都存储在一个数组中,但其他集合类型也可以)。 然后,代码制作者通过宣布“黑人”和“白人”的数量来“评分”这个猜测。 从猜测的每个数字中获得黑色,其在值和位置都是正确的。 对于放置在错误位置的每个正确数字,将获得白色。 在该示例中,得分为1黑色(对于位置1中的“1”)和2个白色(对于位置2和3中的“1”和“2”)。 回到问题:我正在寻找一种优雅的方法来计算C#中的猜测分数,最好使用LINQ。 到目前为止,我已经提出了一个计算黑人数量的声明: int blacks = new int[] { 0, 1, 2, 3 }.Count(i => (guess[i] == secret[i])); 我打算继续说明白人数是总匹配数(3)减去黑人数。 所以我尝试过: int whites = guess.Intersect(secret).Count() – blacks; 但是,唉,IEnumerable.Intersect()产生{1,2}而不是{1,1,2},因为它只查看不同的数字。 所以它计算白色= […]

如何使用LINQ to Objects计划不重叠的作业?

这是另一个资源分配问题。 我的目标是运行查询以将任何时隙的最高优先级作业分配给两个CPU核心之一(仅作为示例,因此我们假设没有中断或多任务处理)。 注意:这与我之前关于分区的post类似,但重点关注重叠时间和分配多个项目,而不仅仅是最高优先级项目。 这是我们的目标: public class Job { public int Id; public int Priority; public DateTime Begin; public DateTime End; } 真实的数据集非常大,但是对于这个例子,假设有1000个作业要分配给两个CPU核心。 它们都被加载到内存中,我需要针对它们运行单个LINQ to Objects查询。 目前这需要近8秒和140万次比较。 我利用这篇文章中引用的逻辑来确定两个项目是否重叠,但与该post不同,我不仅需要找到重叠的项目,而是安排任何重叠集合的顶部项目,然后安排下一个项目。 在我开始使用代码之前,让我指出当前inneficient算法的步骤: 确定剩余的作业(通过删除任何已分配的作业) 通过自行加入所有剩余作业并按优先级选择最重叠的作业,将作业分配给当前核心。 通过执行查询来连接新作业 对于每个剩余的核心,从Stop 1开始重复 问题: 如何最有效地完成这项工作? 我可以在第2步中避免使用子查询吗? 也许是通过分组,但我不确定如何基于.Overlaps()扩展方法进行分组。 这些工作已经订购。 第2步可以利用这个事实,只与短期内的项目进行比较而不是每一项工作吗? 是否更有效地分配核心而不是循环? 这可以避免在步骤3中执行查询? 同样,如果我可以对多组重叠作业进行分组,那么分配核心只需要为每个重叠的集合选择N. 完整示例代码: public class Job { public static long Iterations; public int Id; public […]

使用LINQ(灯具列表)形成锦标赛表

我有一系列的玩家(字符串[]),现在我需要得到一组代表游戏(playerN-playerM)的对象来组织锦标赛表,如下图所示: 期望的最终结果是生成具有需要播放的所有游戏的夹具列表。 如何以高效的方式使用LINQ? 更新:AB,AC,AD不正确 – 游戏应该能够并行运行。 我需要的结果与图片中的顺序相同

Linq-to-Sql SubmitChanges没有更新字段……为什么?

我昨天晚上发布了这个问题 ,这让我发现了一个很大的问题! 我的数据库中有一个名为Units的十进制列,只要我将列的值设置为NON ZERO,并使用新值SubmitChanges列更新。 如果我尝试将列的值设置为ZERO,则SubmitChanges不会更新列。 data.Units = this.ReadProperty(UnitsProperty); data.UnitPrice = this.ReadProperty(UnitPriceProperty); data.Price = this.ReadProperty(PriceProperty); 我已经看了一下DataContext日志,我可以看到查询中不包含具有ZERO值的字段。 即使我试图对代码进行硬编码,Linq也会忽略它。 data.Units = 0; data.UnitPrice = 0; data.Price = 0; 不用说这是杀了我! 任何想法为什么会这样? 解 我在SO社区的帮助下想出了我的问题。 我的问题是由于我创建我的实体附加时的事实,列的默认值设置为零,所以当它试图将值分配给零时… LinqToSql说嘿……没有改变,所以我没有更新价值。 我现在在做什么……只是为了让它发挥作用如下: ctx.DataContext.InvoiceItems.Attach(data, true); 这似乎迫使所有值自己写入数据库。 这适用于现在。

如何使用Linq从List 中获取第一个对象

我在c#4.0中有以下代码。 //Dictionary object with Key as string and Value as List of Component type object Dictionary<String, List> dic = new Dictionary<String, List>(); //Here I am trying to do the loping for List foreach (List lstComp in dic.Values.ToList()) { // Below I am trying to get first component from the lstComp object. // Can we achieve […]

如何将字典的内容写入文本文件?

我有一个Dictionary类型的字典对象 并尝试使用StreamWriter将整个内容输出到文本文件,但无法从Dictionary类中找到正确的方法。 using (StreamWriter sw = new StreamWriter(“myfile.txt”)) { sw.WriteLine(dictionary.First()); } 我只能检索第一个元素,它还有一个方括号和中间的逗号分隔符: [彼得,管理员] 并且很高兴[Peter Admin](没有逗号)

来自Linq查询的调用方法

我正在使用Linq查询和调用方法。 oPwd = objDecryptor.DecryptIt((c.Password.ToString()) 它将返回null值。 意味着这不起作用。 我如何解决这个问题。 谢谢.. var q = from s in db.User join c in db.EmailAccount on s.UserId equals c.UserId join d in db.POPSettings on c.PopSettingId equals d.POPSettingsId where s.UserId == UserId && c.EmailId == EmailId select new { oUserId = s.UserId, oUserName = s.Name, oEmailId = c.EmailId, oEmailAccId = c.EmailAccId, oPwd […]

使用Linq从列表中获取所有匹配值的索引

嘿林克专家在那里, 我刚刚问了一个非常相似的问题并且知道解决方案可能非常容易,但仍然发现自己无法围绕如何使用linq以最有效的方式完成这个相当简单的任务。 我的基本情况是我有一个值列表,例如: Lst1: a a b b c b a c a 我想创建一个新列表,它将保存Lst1中的所有索引,例如,值=“a”。 所以,在这个例子中,我们将: LstIndexes: 0 1 6 8 现在,我知道我可以用循环来做这个(我宁愿避免使用Linq),我甚至想出了如何用Linq以下面的方式做到这一点: LstIndexes= Lst1.Select(Function(item As String, index As Integer) index) _ .Where(Function(index As Integer) Lst1(index) = “a”).ToList 我对此的挑战是它在列表上迭代两次因此效率低下。 如何使用Linq以最有效的方式获得我的结果? 谢谢!!!!

如何使用其他参数更新Linq表达式?

我有一个Linq表达式,可能会根据某些条件进行更改。 我想做的一个例子(留空一点我不确定): Expression<Func> filter = (Project p) => p.UserName == “Bob”; if(showArchived) { // update filter to add && p.Archived } // query the database when the filter is built IEnumerable projects = unitOfWork.ProjectRepository.Get(filter); 如何更新filter以添加任何额外参数? 在检索所有记录的那一刻,我使用Where进一步过滤结果。 但是,这会导致对数据库的查询多于严格必要的查询。 IEnumerable projects = unitOfWork.ProjectRepository.Get(filter); if(showArchived) { projects = projects.Where(p => p.Archived); } Get方法使用GenericRepository模式: public class GenericRepository where TEntity […]