Tag: linq

我可以在C#中动态生成linq表达式吗?

我现在有一块看起来像这样的Linq; List childrenToBeRemoved = this.ItemsSource.Where(o => o.ParentID == “1234”).ToList(); 其中ItemsSource是动态的ObservableCollection。 这工作正常,但我遇到的问题是ParentID是一个可以变化的属性。 例如它可以命名为ParentPkey或ParentKey等。 我可以创建一个表达式,我可以在比较中指定要使用的属性吗? 我尝试过使用动态linq,但它不能使用动态集合,与pocos集合工作正常。 谢谢…

使用Json.NET测试嵌套键?

我想过滤一个json编码字符串的反应流,如下所示: { “Key1” : {“key2″:”value”}, “key3” : “other values” } 我想过滤具有key2值的项目,如下所示: IDisposable valueQuery = globalEventStream .Select(e => JObject.Parse(e.EventArgs.Data)) .Where(e => e[“key1”][“key2”] != null) 但这给了我错误 Cannot access child value on Newtonsoft.Json.Linq.JValue 我能找到解决这个问题的唯一方法是执行以下操作: IDisposable deathDisposable = globalEventStream .Select(e => JObject.Parse(e.EventArgs.Data)) .Where(e => e[“key1”] != null).Select(e => e[“key1”]) .Where(e => e[“key2”] != null).Select(e => e[“key2”]) 有没有办法用一个Where语句过滤嵌套键?

将文本文件转换为List

我有一个ID号的CSV文件,我需要它作为IEnumberable 。 我试图尽可能简单地从A到B,并想出了以下想法: Global.migrated = File.ReadAllText(Global.migrationList).Split(‘,’).Cast().ToList(); 但是当我运行它时,我被告知Cast无效。 我也尝试读取String列表并转换为int: List myTemp = File.ReadAllText(Global.migrationList).Split(‘,’).ToList(); Global.migrated = myTemp.Cast(); 但是这会引发以下错误: Cannot implicitly convert type ‘System.Collections.Generic.IEnumerable’ to ‘System.Collections.List.’ An explicit conversion exists. Are you missing a cast? 我不明白。 在这种情况下,我试图强制转换的对象不是IEnumerable 。 它应该是List 。 我担心我错过了一些关于铸造如何工作的重要信息。

LINQ使用接口对抗两个不同的数据上下文

这是我在这里提出的问题的延续。 简介:我有两个不同的数据库,只有很少的更改(一个表中缺少一个表和外键),我希望我的导入实用程序使用Linq-To-Sql能够使用数据填充这两个数据库,而不会重复逻辑。 我的第一种方法是在单个变量中使用dynamic存储两个不同的数据库上下文,但这种方法不起作用,我建议使用接口来实现此目的。 现在我碰到了以下问题: 我正确地从我的db上下文类中提取了接口: public interface IDataContext { System.Data.Linq.Table FieldCollections { get; } System.Data.Linq.Table Fields { get; } } …但是为了能够通过两个不同的数据库上下文类实现接口,我不得不用实际的LINQ类( FieldCollection , Field )替换接口。 现在我在我的类实现中返回Table或Table遇到问题。 db上下文类的自动生成代码如下: public System.Data.Linq.Table FieldCollections { get { return this.GetTable(); } } 所以,为了在这里实现IDataContext ,我需要将返回值更改为Table 。 如何在我的属性getter Table Table为Table 而不从数据库中检索完整的表 ?

是否有更有效的方法来随机化一组LINQ结果?

我已经生成了一个函数来取回一组随机的提交,具体取决于传递给它的数量,但是我担心即使现在通过少量数据传输大量数据,它也会变得很有效率。引起问题。 是否有更有效的方式来做以下事情? public List GetRandomWinners(int id) { List submissions = new List(); int amount = (DbContext().Competitions .Where(s => s.CompetitionId == id).FirstOrDefault()).NumberWinners; for (int i = 1 ; i s.CompetitionId == id && s.CorrectAnswer).ToList(); int count = randSubmissions.Count(); int index = new Random().Next(count); foreach (var sub in submissions) { if (sub == randSubmissions.Skip(index).FirstOrDefault()) found = true; […]

如何在字典列表上动态构建分组

我试图在IEnumerable上执行groupby。 问题是我在编译时不知道我想要分组的字段。 我在堆栈上发现了另一个post ,解释了当类已知且具有属性时如何执行此操作,但在我的情况下,我正在处理字典,并且键也仅在运行时已知。 我的代码会像这样(我知道这不会编译……): private object GetValuesGroupedBy(List groupbyNames, List summableNames) { // get the list of items in the grid var listOfDicos = grid.AllItems; return listOfDicos .GroupBy(x => new { x[groupbyNames[0]], x[groupbyNames[1]], x[groupbyNames[2]] }) .Select(group => new { group.Key, group.Sum(x => x[summableNames[0]]), group.Sum(x => x[summableNames[1]]) }); } 有任何想法吗? 我已经开始研究动态LINQ但是卡住了(因为我没有使用属性而是键/值集合)… 谢谢大家!! 肖恩

如何采取X量的问题,总结Y难度

我有一张桌子 问题 – >问题(字符串),难度(int,1-10) 我需要创建一个方法,如标题所示,需要X个问题,其难度应该总结为Y 例如: getQuestions(2,10) – > Question1(diff:4),Question2(diff:6) getQuestions(3,15) – > Question3(diff:5),Question4(diff:5),Question5(diff:5) 如何使用LINQ实现这样的function?

获取强类型的子属性名称

使用控件和网格的数据绑定对象,我讨厌属性名称将如何成为魔术字符串,因此我创建了一个非常简单的方法,如下所示: public static string GetPropertyName(Expression<Func> expressionForProperty) { MemberExpression expression = expressionForProperty.Body as MemberExpression; return expression.Member.Name; } 这让我可以使用如下代码: Product.GetPropertyName(m => m.Name) 返回“名称”。 这适用于基本对象。 但是,如果我将方法调用更改为: Product.GetPropertyName(m => m.ProductCategory.Name) 这也返回“名称”。 但为了使数据绑定工作,我需要它返回“ProductCategory.Name”。 有没有办法通过改变方法“GetPropertyName”来达到这个目的? 可能的解决方法是: string test = Product.GetPropertyName(p => p.ProductCategory) + “.” + ProductCategory.GetPropertyName(pc => pc.Name) 但是,这不是一个简洁的解决方案。

DataTable上的复杂GROUP BY

我有一个复杂的实体CostPageDTO ,如下所示: public class CostPageDTO { public string CostPageNumber { get; set; } public string Description { get; set; } public char OrderType { get; set; } public string VendorName { get; set; } public List Items { get; set; } } public class ItemDTO { public string BrandCode { get; set; } public string […]

根据部分ID列表过滤HtmlElements列表

我有一个HtmlElementCollection,我想使用Linq获取一个HtmlElements列表,其中id包含来自另一个列表的id。 所以我尝试了一些没有成功的事情。 我从集合中获取一个列表并尝试过滤它。 这是部分ID的列表。 元素ID是不同的,它们具有与此列表对应的ID以及开头的一些随机看似的数字。 string[] ids = {“btadminh_struct.description”, “thtmlb_textView_6”, “thtmlb_textView_7”, “btadminh_struct.object_id”, “thtmlb_textView_12”, “zbtsalesset_struct.po_number_sold”, “thtmlb_textView_17”, “thtmlb_textView_21”, “thtmlb_textView_24”, “btcustomerh_z_followupdate”, “thtmlb_textView_29”, “btrefobjmain_ibibase”, “btrefobjmain_ibinstancedesc”, “btpartnerserviceto_struct.description_name”, “btpartnerset_contact_name”, “zzericempresp_struct.partner_no”, “zbtcsrowner_struct.partner_no”, “btcustomerh_struct.zcomments”, “thtmlb_textView_19”, “btadminh_servicecontractdescr”, “btcustomerh_zcontracttype_descr”, “btrefobjmain_network_id”, “btrefobjmain_node_id”, “btrefobjmain_site_id”}; 元素ID看起来像这样: “C29_W87_V88_btrefobjmain_network_instance”, “C29_W87_V88_btrefobjmain_network_id__items”, “C29_W87_V88_btrefobjmain_network_id”, “C29_W87_V88_btrefobjmain_network_id-btn”, “C29_W87_V88_btrefobjmain_network_id__key”, “C29_W87_V88_thtmlb_label_2”, “C29_W87_V88_btrefobjmain_service_id__items”, “C29_W87_V88_btrefobjmain_service_id”, “C29_W87_V88_btrefobjmain_service_id-btn”, “C29_W87_V88_btrefobjmain_service_id__key”, “C29_W87_V88_thtmlb_label_3”, “C29_W87_V88_btrefobjmain_networkadap_id__items”, “C29_W87_V88_btrefobjmain_networkadap_id”, “C29_W87_V88_btrefobjmain_networkadap_id-btn”, “C29_W87_V88_btrefobjmain_networkadap_id__key”, 所以我把我的集合放到了我可以查询的List中。 var elems = doc.All.Cast(); 我尝试过不同的方法,其中没有一种方法可行。 我也想使用Linq并避免使用丑陋的2-D […]