Tag: linq

Linq GroupBy – 如何在运行时指定分组键?

是否有一种很好的方法可以在运行时确定分组键的Linq GroupBy ? 例如,我希望从用户选择的字段列表构建分组键 – 您可以这样做吗? 我知道如果我将所有内容转换为字符串表,我可以轻松地完成它,但我想知道是否有一种优雅或聪明的方法来实现这一点。 class Item { public int A, B; public DateTime D; public double X, Y, Z; } 我有一个名为List data 。 我想做一些事情,比如检索由A分组的X的总和,或者用A和B分组的X , Y和Z的总和。 但是进入分组的哪些字段应该能够以某种方式在运行时指定。

C#LINQ:字符串(“”)如何解析为数组?

我试图将一个字符串解析成数组,并找到一个非常简洁的方法。 string line = “[1, 2, 3]”; string[] input = line.Substring(1, line.Length – 2).Split(); int[] num = input.Skip(2) .Select(y => int.Parse(y)) .ToArray(); 我尝试删除Skip(2),因为非int字符串,我无法获取数组。 我的问题是那些LINQ函数的执行顺序是什么。 Skip在这里叫多少次? 提前致谢。

这两种算法之间是否存在改变IEnumerable的性能差异?

这两个问题给出了改组IEnumerable的类似算法: C#:使用Random和OrderBy是一个很好的shuffle算法吗? 你可以在C#中乱序列举一个集合吗? 以下是两种方法并排: public static IEnumerable Shuffle1 (this IEnumerable source) { Random random = new Random (); T [] copy = source.ToArray (); for (int i = copy.Length – 1; i >= 0; i–) { int index = random.Next (i + 1); yield return copy [index]; copy [index] = copy [i]; } } public […]

在LINQ中使用PropertyInfo对象查询集合

我有一个像这样的签名的方法 void RefreshMethod(IEnumerable lst, string propertyName) where T:class { Type type = typeof(T); PropertyInfo property = type.GetProperties().Single(u => u.Name == primaryKeyProperty); //query goes here } 现在我想查询该集合以获取其所有值 propertyName <0 在一个简单的场景中,它就像这样容易 lst.where(u=>u.ID<0) 但在这里我没有那个ID属性,但有相应的“PropertyInfo”对象。 我应该怎么做到这一点。 亲切的指导

LINQ:加入MySql和SQL Server表

我有相关数据存在于两个完全独立的数据库中,我需要来自这两个数据库的信息。 其中一个数据库存在于MySql服务器上,另一个存在于MS SQL Server上。 不要问为什么我们将相关数据存储在两个完全不同的服务器上,这是一个很长的故事。 从高级角度来看,我需要将MySqlTableA连接到SQLServerTableB ,执行一些复杂的限制,并可能执行一些GROUP BY和计数。 我正试图找到一种方法,使这两个数据库之间的连接相当容易。 我认为LINQ可以解决我的问题,但据我所知,我不能创建一个同时具有MySql和SQL Server源的上下文。 我可以将两个源放在不同的上下文中 – 使用Devart的LinqConnect创建MySql上下文 – 但LINQ不允许跨上下文连接。 (我尝试了这里描述的方法,但它不起作用: 模拟交叉上下文连接 – LINQ / C# ) 那么我的选择是什么? 有没有办法有效地连接这两个不同的数据库服务器上的表(虽然LINQ或其他),或者我将不得不循环并手动加入数据? 编辑: 如前所述,我已经尝试过AsQueryable()解决方法,但我仍然遇到了跨上下文exception。 这是我的代码: public static MySqlDataContext mysql = new MySqlDataContext(); public static SQLDataContext sql = new SQLDataContext(); public static void Main() { var rows = from a in mysql.tableA join […]

有没有办法否定谓词?

我想做这样的事情: List list1 = … List list2 = … Predicate condition = … … list2.RemoveAll (!condition); … list2.AddRange (list1.FindAll (condition)); 但是,这会导致编译器错误,如! 不能应用于Predicate 。 有没有办法做到这一点?

有没有办法记住或物化IEnumerable?

当给定d您可能正在处理类似列表或数组的固定序列,将枚举某些外部数据源的AST,甚至是某些现有集合上的AST。 有没有办法安全地“实现”枚举,以便像foreach,count等枚举操作每次都不执行AST? 我经常使用.ToArray()来创建这个表示,但如果底层存储已经是一个列表或其他固定序列,那似乎就是浪费了复制。 如果我能这样做会很好 var enumerable = someEnumerable.Materialize(); if(enumberable.Any() { foreach(var item in enumerable) { … } } else { … } 不必担心.Any()和foreach尝试枚举序列两次,没有它不成功地复制可枚举。

是否可以在asp.net中使用静态LINQ to SQL DataContext维护事务?

我有ASP.NET应用程序,它使用LINQ to SQL与SQL服务器连接。 我有一个静态类,当然它可以在应用程序级别上工作。 我在这个静态类中创建了DataContext静态对象。 我没有在应用程序中创建任何数据上下文对象,除此之外。 我在哪里使用这个静态数据上下文对象进行每个数据库操作。 那么这会将事务维护为每个登录用户的线程安全吗?

使用LINQ对XML进行排序

我想用LINQ对XML文件进行排序。 XML在下面,仅是一个示例。 通常它更大更复杂。 XML应按标题升序排序。 不是整个XML,而是每个parentNode本身。 叶子总是在底部。 文件夹或非叶子位于顶部。 以下XML已经结构良好,但标题的顺序错误。 排序算法还应该替换错误定位的非叶节点。 我已经有一些代码可以完成这项工作,但我想知道是否有更优雅或更短的方式。 目前我必须调用函数递归来进行转换。 也许这可以用另一种方式完成。 谢谢。 刘若英 这是我的XML: 这是我的代码: using (XmlReader reader = XmlReader.Create(XmlStream)) { XDocument xDoc = XDocument.Load(reader); Action sortXml = null; sortXml = xElement => { bool sortParentNode = false; foreach (var xElem in xElement.Elements()) { if (xElem.HasElements) { // go into deep sortXml(xElem); } else […]

获取2个列表之间的差异

我有两个列表( ListA和ListB ),这些列表的类型是相同的PersonInfo , Login字段是唯一键。 public class PersonInfo { public string Login { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public bool Active { get; set; } } 我想比较这两个列表: 我想获得ListA不可用的ListB中的项目列表 对于两个列表中可用的项目,我想从列表中获取列表( Login字段是唯一键),这两个列表之间存在差异。 示例:如果对于ListA中的Login “MyLogin”, ListA的值与ListA中的值不匹配。 “MyLogin”作为Login项的项必须是结果列表的一部分。 示例:如果特定登录的ListA和ListB之间的Age不同,则该项必须是结果的一部分 谢谢。