Tag: linq

C#Linq – 延迟执行

如果我构建一个查询说: (使用System.Xml.Linq中的XDocument类构建查询) var elements = from e in calendarDocument.Root.Elements(“elementName”) select e; 然后我调用elements.Last()几次。 每次调用都会返回最新的Last()元素吗? 例如,如果我这样做 elements.Last().AddAfterSelf(new XElement(“elementName”, “someValue1”)); elements.Last().AddAfterSelf(new XElement(“elementName”, “someValue2”)); elements.Last().AddAfterSelf(new XElement(“elementName”, “someValue3”)); elements.Last().AddAfterSelf(new XElement(“elementName”, “someValue4”)); 它实际上是每次都获取最新元素并添加一个新元素或者是elements.Last()每次都使用相同的元素吗?

Linq从两个列表中返回所有元素对?

给定列表l1 = {1, 2}和l2 = {4, 5, 6 }我想获得一个包含元素的新列表: rez = { {1, 4}, {1, 5}, {1, 6}, {2, 4}, {2, 5}, {2, 6} } 建议?

在LINQ中返回null而不是默认值

我有LINQ查询,它必须检索一些DateTime值。 Somethimes我没有匹配,我必须为该DateTime值返回NULL而不是DateTime的默认值。 我怎样才能避免这种情况并返回NULL而不是默认值? 我的LINQ: CreatedDate = ctaMatch.Select(d => d.CreatedDate).DefaultIfEmpty().FirstOrDefault() 在DefaultIfEmpty中我只能放置DateTime。

如何在Linq to SQL中使用distinct with group

我正在尝试将以下sql转换为Linq 2 SQL: select groupId, count(distinct(userId)) from processroundissueinstance group by groupId 这是我的代码: var q = from i in ProcessRoundIssueInstance group i by i.GroupID into g select new { Key = g.Key, Count = g.Select(x => x.UserID).Distinct().Count() }; 当我运行代码时,我一直收到Invalid GroupID。 有任何想法吗? 看起来不同的是搞砸了…… 这是生成的sql: SELECT [t1].[GroupID] AS [Key], ( SELECT COUNT(*) FROM ( SELECT DISTINCT [t2].[UserID] FROM […]

.GroupBy()是否保证其分组中的顺序?

假设我有一个(有序的)动物序列: 鹰 象 狼蛛 龟 虎 我按第一封信分组: Animals.GroupBy(animal => animal.First()) 结果序列中的IGrouping元素是否与输入序列的顺序相同?

动态添加新的lambda表达式以创建filter

我需要对ObjectSet进行一些过滤,以通过这样做获取我需要的实体: query = this.ObjectSet.Where(x => x.TypeId == 3); // this is just an example; 稍后在代码中(以及在启动延迟执行之前)我再次过滤查询,如下所示: query = query.Where(); 到目前为止,这非常有效。 这是我的问题: 实体包含DateFrom属性和DateTo属性,它们都是DataTime类型。 它们代表了一段时间 。 我需要过滤实体,只获得那些属于时间段 集合的实体。 集合中的句点不一定是连续的 ,因此,检索实体的逻辑看起来像: entities.Where(x => x.DateFrom >= Period1.DateFrom and x.DateTo x.DateFrom >= Period2.DateFrom and x.DateTo <= Period2.DateTo) || ……以及集合中所有时期的不断变化。 我试过这样做: foreach (var ratePeriod in ratePeriods) { var period = ratePeriod; query […]

是否有可能确定IEnumerable 是否已将执行挂起?

我有一个接受Enumerable的函数。 我需要确保对枚举数进行评估,但是我不想创建它的副本(例如,通过ToList()或ToArray())如果它已在List或其他“冻结”集合中准备就绪。 冻结我指的是已经建立了一组项目的集合,例如List,Array,FsharpSet,Collection等,而不是像Select()和where()这样的linq。 是否有可能创建一个函数“ForceEvaluation”,可以确定枚举是否已将执行挂起,然后评估可枚举? public void Process(IEnumerable foos) { IEnumerable evalutedFoos = ForceEvaluation(foos) EnterLockedMode(); // all the deferred processing needs to have been done before this line. foreach (Foo foo in foos) { Bar(foo); } } public IEnumerable ForceEvaluation(IEnumerable foos) { if(??????) { return foos} else {return foos.ToList()} } } 经过一些研究后,我意识到这在任何实际意义上都是不可能的,并且需要对每个迭代器进行复杂的代码检查。 因此,我将使用Mark的答案的变体并创建已知安全类型的白名单,并且只需调用ToList()不在白名单上的任何内容。 感谢大家的帮助。 编辑*经过更多的反思,我意识到这相当于停止问题。 所以非常不可能。

将数组拆分为2个数组C#

编辑:我尝试过Take / Skip方法,但是我收到以下错误: Cannot implicitly convert type ‘System.Collections.Generic.IEnumerable’ to ‘string[]’. An explicit conversion exists (are you missing a cast?) 我不知道我做错了什么因为我复制了赛义德的代码。 我有一个字符串数组(包含20到300个项目),我想从第一个中间分割成2个独立的数组。 我知道如何使用for循环来做到这一点,但我想知道是否有更快/更好的方法。 我还需要能够正确地分割数组,即使它有奇数个项目,例如: string[] words = {“apple”, “orange”, “banana”, “pear”, “lemon”}; string[] firstarray, secondarray; SplitArray(words, out firstarray, out secondarray); // Or some other function // firstarray has the first 3 of the items from words, […]

合并xml文档

我遇到的关于合并XML文档的所有解决方案都达不到我想要的。 让我解释: XML文档1: XML文档2: 进入这样的最终文档: 文档内容相似,但可以具有任意数量的子节点。 我也想消除重复。 我认为重复是具有相同属性的元素(基于属性名称和值)。 有谁见过这个实现的工作示例? 我可以想象如何使用一些循环和一些递归来编写它,但对我来说,这似乎不是实现我想要的最佳方式:) 欢呼并提前谢谢! *编辑* 既然共识是循环和递归是必须的,那么最优雅和有效的方法是什么呢? 我想这个问题的另一个基本问题是在迭代时比较节点的最佳方法是什么?

不使用LINQ的原因

是否有任何好的理由不在我的项目中使用LINQ? 我们使用.Net 3.5和VSTO 3.0。