Tag: linq

LINQ:如何在不使用For循环与Array的情况下使用RemoveAll

我目前有一个日志对象,我想根据LINQ查询删除对象。 如果程序中的版本总和大于60,我想删除日志中的所有记录。目前我非常有信心这可行,但它看起来像kludgy: for (int index = 0; index (log.Program[index].Version[0].Value + log.Program[index].Version[1].Value + log.Program[index].Version[2].Value ) > 60); } 该程序是一个包含4个值的数组,版本具有3个值的数组。 有没有更简单的方法在LINQ中执行此RemoveAll而不使用for循环? 在此先感谢您的帮助! 编辑:不幸的是,程序和版本所基于的变量类型(这是我正在使用的框架的约束)限制了我们,使得我无法访问“任何”成员。 然而,我确认如果你通过创建一些示例代码来获得列表 ,那么tzaman的解决方案是有效的。 我被限制为类似数组的变量(参见注释掉的区域) // I’m restricted to Arrays, but if I had lists, this would work. internal class MyLogCollection { List MyListOfZones = new List(); public void TestRemove() { // Original Implementation for (int […]

无法将System.Linq.IQueryable 类型隐式转换为字符串

我有两个名为Rank和CrewMembers的表。我想根据CrewMember的id获取Rank表中存在的rank的名称。我已经将crewId作为参数传递,并且在此基础上该方法将返回该特定船员的等级。这就是我的代码是 – public string GetRank(int CrewId) { string rank = (from r1 in context.Rank join r2 in context.CrewMember on r1.RankId equals r2.RankId where r2.CrewId == CrewId select r1.RankName); return rank; } 当我构建代码时,我得到以下错误 – 无法将System.Linq.IQueryable类型隐式转换为字符串 我哪里错了?

表达式树可能不包含赋值运算符?

如何在linq语句中增加索引值。 int headIndex = -1; // int itemIndex = -1; lst = (from xx in db.vwCustomizationHeaders where xx.ProductID == pID select new custHeader() { headIndex = headIndex++,// Guid.NewGuid(), }

PredicateBuilder返回零记录

我正在使用PredicateBuilder创建一个动态Where子句来查询DataTable中的数据。 我有一个包含我需要搜索的列名和值的字典。 我只是迭代字典,如果键匹配列名,则将该键和值添加到谓词。 一切似乎工作正常,直到对数据表运行实际查询,我得到零记录:(但如果我用p => p [“年”] ==“2010”替换动态谓词,我得到记录回来。这是代码: var objectList = table.AsEnumerable(); Func predicate = GetPredicate(parms, table.Columns); var list1 = objectList.Where(predicate).ToList(); private static Func GetPredicate(Dictionary parms, DataColumnCollection dataColumnCollection) { var predicate = PredicateBuilder.False(); foreach (var parm in parms) { if (dataColumnCollection.Contains(parm.Key)) { var copy = parm; predicate = predicate.And(p => p[copy.Key] == copy.Value); } } […]

如何在LINQ中执行分组并获取Iqueryable或自定义类对象?

这是我的查询 – var data = Goaldata.GroupBy(c => c.GoalId).ToList(); 这将返回一个Igrouping对象,我想要一个Iqueryable对象,我可以直接查询以获取数据,而在这种情况下,我必须使用foreach()循环,然后获取数据。 是否有另一种在LINQ中分组的方法,它直接作为Iqueryable或List的列表返回,类似于LINQ中的顺序。

返回对象数组的不同列表,其中数组项的数量是非特定的

有没有办法使用LINQ从对象数组列表中获取不同的项目列表,而不知道每个数组中有多少项? 每个数组项中的项数在整个列表中都是相同的。 // Foo is a list of object arrays. The number of items // each array is non-specific. // (In this example there is only 3 items, but there could be 100) var foo = new List(); // I add some items to the list. foo.Add(new object[] { 1, “Something”, true }); foo.Add(new object[] […]

使用Linq和C#,是否可以加入两个列表,但每个项目都有交错?

有两个相同对象类型的列表。 我想使用交错模式加入它们,其中第一个列表的i个项目由第二个列表中的j个项目分隔。 在本质上: 第一个清单 {a,b,c,d,e,f,g,h} 第二个清单 {0,1,2,3,4} 其中第一个列表的分组计数为3,第二个列表的分组计数为2。 导致 {a,b,c,0,1,e,f,g,2,3,h,4} 这对Linq有可能吗?

C#根据另一个List(不同类)的值序列对List进行排序

我目前陷入了一个问题,我有2个列表,我想根据第一个List中的值对第二个List进行排序,这是一个例子: public class data { public string Name{get; set;} public int ID{get; set} } public class dataToSort { public int ID{get; set;} public string retrievedData{get; set} public string timeStamp{get; set} } 所以假设我有2个List对象,一个用于数据,一个用于dataToSort,它们的内容如下: data: “Alpha”, “80” dataToSort: “21”, “XA”, “YA” “Beta”, “47” “47”, “XB”, “YB” “Charlie”, “153” “80”, “XC”, “YC” “Delta”, “21” “153”,”XD”, “YD” 所以我想要做的是使dataToSort的顺序等于数据中ID的顺序,如下所示: dataToSort: […]

强类型DataContext如何工作?

这是我今天早些时候提出的问题的深入延续, 我仍然难以理解。 我正在为我的应用程序使用强类型DataContext,虽然它发出警告,但它神奇地起作用。 它是如何做到的? 这是通常用于使用LINQ-to-SQL连接到数据库的代码。 class MyDatabase : DataContext { public Table Widgets; public Table Cars; public MyDatabase (string connection) : base(connection) { } } 即使它发出警告,它也可以开箱即用。 可以使用以下方法开始阅读: using (var db = new MyDatabase(connectionString)) { foreach (var w in db.Widgets) Console.WriteLine(w); } Widgets似乎是MyDatabase类的一个字段。 在我的代码中,我不会将它分配给任何东西。 但在其他地方,我正在阅读它并且它具有价值。 为什么? 在LINQ-to-SQL的其他示例中,包括由Visual Studio 2008的DBML布局工具生成的代码,数据上下文类可能如下所示: public partial class MyDatabase : DataContext { […]

我可以使用LINQ去除字符串中的重复空格吗?

一个快速的脑筋急转弯:给一个字符串 This is a string with repeating spaces LINQ表达的最终结果是什么 This is a string with repeating spaces 谢谢! 作为参考,这是一种非LINQ方式: private static IEnumerable RemoveRepeatingSpaces(IEnumerable text) { bool isSpace = false; foreach (var c in text) { if (isSpace && char.IsWhiteSpace(c)) continue; isSpace = char.IsWhiteSpace(c); yield return c; } }