Tag: linq

将SQL Rank()转换为LINQ,或替代

我有下面的SQL语句,可以按预期/预期工作。 但是我想将它翻译成LINQ语句(Lambda ??),以便它适合我的其余DAL。 但是我无法弄清楚如何在LINQ中模拟Rank()。 我在这里发布它的原因,可能是错误的,是看看是否有人可以替换Rank()语句,以便我可以切换它。 或者,如果有一种方法可以在LINQ中表示Rank() ,也可以理解。 USE CMO SELECT vp.[PersonID] AS [PersonId] ,ce.[EnrollmentID] ,vp.[FirstName] ,vp.[LastName] ,ce.[EnrollmentDate] ,ce.[DisenrollmentDate] ,wh.WorkerCategory FROM [dbo].[vwPersonInfo] AS vp INNER JOIN ( [dbo].[tblCMOEnrollment] AS ce LEFT OUTER JOIN ( SELECT * ,RANK()OVER(PARTITION BY EnrollmentID ORDER BY CASE WHEN EndDate IS NULL THEN 1 ELSE 2 END, EndDate DESC, StartDate DESC) AS […]

为什么Linq Cast 助手不能与隐式强制转换操作符一起使用?

请在决定投票前重复阅读… 我有一个类型,它实现了另一种类型的implicit cast运算符: class A { private B b; public static implicit operator B(A a) { return ab; } } class B { } 现在,隐式和显式转换工作正常: B b = a; B b2 = (B)a; ……那么Linq的.Cast怎么没有? A[] aa = new A[]{…}; var bb = aa.Cast(); //throws InvalidCastException 查看.Cast的源代码,没有太大的魔力:如果参数确实是IEnumerable ,则会出现一些特殊情况,然后: foreach (object obj in source) yield return (T)obj; […]

将数组转换为字典,将值作为项的索引,将键作为项本身

我有一个数组,如 – arr[0] = “Name”; arr[1] = “Address”; arr[2] = “Phone”; … 我想创建一个Dictionary这样数组值将成为字典键,字典值将成为索引,这样我就可以通过在O(1)查询其名称来获取列的索引。 我知道这应该是相当简单的,但我无法理解它。 我试过了 – Dictionary myDict = arr.ToDictionary(x => x, x => indexOf(x)) 然而,这回来了 – {(Name, 0), (Address, 0), (Phone, 0),…} 我知道这是因为它存储了第一次出现的索引,但那不是我想要做的。

Skip的性能(以及类似function,如Take)

我刚看了.NET Framework的Skip / Take扩展方法的源代码(在IEnumerable类型上),发现内部实现正在使用GetEnumerator方法: // .NET framework public static IEnumerable Skip(this IEnumerable source, int count) { if (source == null) throw Error.ArgumentNull(“source”); return SkipIterator(source, count); } static IEnumerable SkipIterator(IEnumerable source, int count) { using (IEnumerator e = source.GetEnumerator()) { while (count > 0 && e.MoveNext()) count–; if (count <= 0) { while (e.MoveNext()) yield return […]

LINQ Lambda Group By Sum

嗨,我可以在方法语法中这样做,但我正在努力提高我的lambda技能我该怎么办: SELECT SUM([job_group_quota]) as ‘SUM’ FROM [dbo].[tbl_job_session] WHERE [job_group_job_number] = @jobnum and [job_group_ID] like @sess GROUP BY [job_group_job_number] 我一直在搞乱它,但无法做到正确。 lnq.tbl_job_sessions.GroupBy(a => a.job_group_job_number == jnum) .Select(b => new { b.job_group_quota}).Sum();

如果可能有空集,如何进行Linq聚合?

我有一个Linq的Things集合,其中Thing有一个Amount (十进制)属性。 我正在尝试针对特定事物的子集对此进行聚合: var total = myThings.Sum(t => t.Amount); 这很好用。 但后来我添加了一个条件,让我在结果中没有任何东西: var total = myThings.Where(t => t.OtherProperty == 123).Sum(t => t.Amount); 而不是得到total = 0或null,我得到一个错误: System.InvalidOperationException:无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型。 这真是令人讨厌,因为我没想到这种行为。 我本来期望总数为零,也许是null – 但肯定不会抛出exception! 我究竟做错了什么? 什么是解决方法/修复? 编辑 – 例子 感谢大家的评论。 这是一些代码,复制和粘贴(不简化)。 这是LinqToSql(也许这就是为什么你无法重现我的问题): var claims = Claim.Where(cl => cl.ID cl.ClaimedAmount); // throws exception

LINQ中的条件“orderby”排序顺序

在LINQ中,是否可以通过排序顺序(升序与降序)进行条件排序。 像这样的东西(不是有效的代码): bool flag; (from w in widgets where w.Name.Contains(“xyz”) orderby w.Id (flag ? ascending : descending) select w)

Linq加入iquery,如何使用defaultifempty

我有一个linq连接查询wriiten,我想取值,如果其中一个是空的… 码: var Details = UnitOfWork.FlightDetails .Query() .Join ( PassengersDetails, x => x.Flightno, y => y.FlightNo, (x, y) => new { y.PassengerId, y.classType, x.Flightno, x.FlightName, } ); 我想用… “Above query”.DefaultIfEmpty ( new { y.PassengerId, y.classType, string.Empty, string.Empty } ); “FlightDetails”是类上的Idatarepository类型,“PassengerDetails”是可查询的局部变量结果。 如何获得乘客ID和Classtype的结果,并且整体结果中不包含flightno和flightname。

C#中的Jaxb等价物

在Java中使用JAXB很容易从xml模式文件生成一组Java类,符合该模式的xml可以反序列化。 是否有一些C#相当于JAXB? 我知道Linq可以对xml文件进行序列化和反序列化。 但是如何从xml模式文件生成C#类,然后将这些类与linq一起使用?

动态LINQ GroupBy多列

我需要将以下LINQ查询转换为动态LINQ,它根据用户输入接受多个分组列。 基本上我有一堆应用分组的下拉列表,我不想枚举每个分组组合。 如果动态LINQ失败,我可能必须手动构建SQL查询,没有人想要它。 var grouping = ( from entry in ObjectContext.OmniturePageModules where entry.StartOfWeek >= startDate && entry.StartOfWeek p.Clicks ) } ); 我不知道如何做到这一点,因为动态LINQ在“hello world”之外完全没有文档记录! 选择/ where / orderby案例。 我只是无法弄清楚语法。 就像是:(?) var grouping = ObjectContext.OmniturePageModules.Where(entry => entry.StartOfWeek >= startDate && entry.StartOfWeek <= endDate && ( section == "Total" || section == "All" || entry.Section == section ) […]