Tag: linq

Linq和延期评估

当您使用LINQ定义可枚举集合时,无论是使用LINQ扩展方法还是使用查询运算符,应用程序实际上都不会在执行LINQ扩展方法时构建集合。 只有在迭代它时才会枚举该集合。 这意味着原始集合中的数据可以在执行LINQ查询和检索查询识别的数据之间进行更改; 您将始终获取最新的数据。 Microsoft Visual C#2013一步一步由John Sharp编写 我写了以下代码: List numbers = new List() { 1, 2, 3, 4, 5 }; IEnumerable res = numbers.FindAll(a => a > 0).Select(b => b).ToList(); numbers.Add(99); foreach (int item in res) Console.Write(item + “, “); 上面的代码的结果如下所示: 1,2,3,4,5, 为什么会这样? 我知道Func , Action和Predicate但我无法弄清楚这里发生了什么。 基于上面的定义,代码是不合理的。

.NET检查两个IEnumerable 是否具有相同的元素

可能重复: 比较两个集合是否相等 我需要validation两个IEnumerable列表是否具有相同的元素,不一定是相同的顺序。 我的目标是.NET 3.5。 这是测试。 问题是, HasSameElements()应该如何实现? var l1 = new[]{1,2,3}; var l2 = new[]{3,1,2}; bool rez1 = l1.HasSameElements(l2);//should be true var l3 = new[]{1,2,3,2}; var l4 = new[]{3,1,2,2}; bool rez2 = l3.HasSameElements(l4);//should be true var l5 = new[]{1,2,3,2}; var l6 = new[]{1,2,3}; bool rez3 = l5.HasSameElements(l6);//should be false 附加说明: 在示例中,我使用IEnumerable,但T可以是任何东西。 T必须实现IComparable吗? Enumerable.SequenceEquals()本身不起作用,它期望元素的顺序相同。 这是HasElements的模板: […]

IIS 7.0与7.5站点Microsoft.Web.Administration.Site BindingCollection

我编写了一个程序,它接受主机名和站点名列表,如果它们在任何站点上都不存在,则将它们添加为站点绑定。 该程序是用.NET 4.0 C#编写的。 在本地(IIS 7.5,Win 7),下面的代码工作正常。 它检测绑定并退出。 在我的服务器(IIS 7.0,Win Server 2008)上,检查失败,并始终添加绑定。 是什么赋予了? LINQ查询是错误的还是Microsoft.Web.Administration库有一些处理IIS 7.0的基本不足之处? 以下是应该在两台机器上运行的代码的一部分: ServerManager oIisMgr = new ServerManager(); Site oSite = oIisMgr.Sites[siteName]; string sBindInfo = “:80:” + this.StripUrl(hostName); //See if this binding is already on some site if (oIisMgr.Sites .Where(ST => ST.Bindings.Where(B => B.BindingInformation == sBindInfo).Any()) .Any()) return true; Binding oBinding = […]

如何获得一个具有以下名称的元素?

我需要从这个XML获取CountryName: http ://api.hostip.info/?ip = 12.215.42.19 响应XML是: This is the Hostip Lookup Service hostip inapplicable 12.215.42.19 Sugar Grove, IL UNITED STATES US -88.4588,41.7696 问题是我不能包括:在Descendants方法中因为它抛出: XmlException:’:’chracater,hex值0x3A,不能包含在名称中。 谢谢

关于FirstOrDefault或SingleOrDefault

FirstOrDefault或SingleOrDefault将返回什么样的数据。 假设我的查询返回3条记录 empid ename salary —– —– —— 1 joy 1500 2 rob 4500 3 jen 6500 所以,如果我们使用FirstOrDefault或SingleOrDefault,那么我将得到什么样的结果集。 请举例说明。 谢谢

使用LINQ时,“输入字符串的格式不正确”

我试图对对象集执行FirstOrDefault()查询并抛出一个奇怪的exception: 我的代码: private RecordObject GetRecordByID(int recID) { return _objectSet.FirstOrDefault(rec => rec.ID == recID); } 例外消息: 输入字符串的格式不正确 InnerException为null。 堆栈跟踪: at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt) at System.Convert.ToDecimal(String value, IFormatProvider provider) at System.String.System.IConvertible.ToDecimal(IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at Oracle.DataAccess.Client.OracleDataReader.ChangeType(Object sourceValue, Type […]

使用LINQ排序不同的值

可能重复: 如何使用LINQ从DataTable获取不同的,有序的名称列表? 这是我的第一个问题。 我从我的数据库中获取了一个下拉列表的不同值列表,如下所示: var plocQ = (from m in db.SERVICE_NRS orderby m.PLOC select new { PlocID = m.PLOC, value = m.PLOC }).Distinct(); 排序似乎没有效果,我必须这样做: var plocQ = (from m in db.SERVICE_NRS select new { PlocID = m.PLOC, value = m.PLOC }).Distinct(); plocQ = from s in plocQ orderby s.PlocID select s; 我想知道这是否与LINQ或数据库有关? 我对LINQ有点新,之前写过太多SQL。 有任何想法吗?

实体的IQueryable .Where(属性在本地数组中)

所以我知道iQueryables被翻译成SQL语句,因此无法处理你可能放入where子句的所有可能的方法。 但这就是我要做的事情: int[] alreadySelectedIds = … var subjects = Entities.NewInstance.Subjects.Where(x => Array.IndexOf(alreadySelectedIds, x.Id) == -1).ToList(); 阅读下面的post,我很高兴EF5应该能够翻译这个。 获取其键匹配id列表(或数组)的实体 使用LINQ从数组查询Int ID 但是,我收到此错误: LINQ to Entities无法识别方法’Int32 IndexOf [Int32](Int32 [],Int32)’方法,并且此方法无法转换为存储表达式。 谷歌搜索这个错误并没有给我太多帮助。 我也试过了 var newSubjects = Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList(); 无法创建类型为“System.Int32 []”的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 和 List alreadySelectedIds = … 无法创建类型为’System.Collections.Generic.List`1’的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 我被困住了,我的大脑变得糊涂,超出了任何类型的优雅康复的可能性。 有人可以救我吗?

在linq-to-entities的一对多连接中只获得一条(最后一条)记录

我在linq-to-entities中有以下内容 clientprojects = (from p in this.SAPMappingEntities.SAP_Master_Projects join c in this.SAPMappingEntities.SAP_Master_ProjectPartners on c.project_no equals p.project_no where c.partner_name.Contains(clientstring) orderby p.start descending select new ClientProjects { client = c.partner_name, location = c.city +”, “+c.region, project_no = c.project_no, start_dt = p.start, end_dt = p.finish }).Take(50).ToList(); 我想更改此查询,以便每个SAP_Master_Project只获取具有最新update_dt的SAP_Master_ProjectPartners记录。 我怎样才能做到这一点? 编辑 有一个项目表,其中包含项目编号和项目详细信息,包括项目开始和结束日期。 有一个项目合作伙伴表,其中包含项目合作伙伴编号,名称,项目编号,更新日期和其他详细信息。 SAP_MASTER_PROJECT project_no 开始 完 SAP_MASTER_PROJECTPARTNERS partner_no project_no PARTNER_NAME […]

Linq查询返回父子的flatened列表

对于linq的世界来说还是新手,我需要一些帮助,将有孩子的父母列表整理成一个ParentChild列表。 像这样: class Program { static void Main() { List parents = new List(); parents.Add(new Parent { Name = “Parent1”, Children = new List { new Child { Name = “Child1” }, new Child { Name = “Child2” } } }); parents.Add(new Parent { Name = “Parent2”, Children = new List { new Child { […]