Tag: linq

如何使用LINQasynchronous地等待任务列表?

我有一个我创build的任务列表,如下所示: public async Task<IList<Foo>> GetFoosAndDoSomethingAsync() { var foos = await GetFoosAsync(); var tasks = foos.Select(async foo => await DoSomethingAsync(foo)).ToList(); … } 通过使用.ToList() ,任务应该都开始。 现在我想等待完成并返回结果。 这工作在上面…块: var list = new List<Foo>(); foreach (var task in tasks) list.Add(await task); return list; 它做我想要的,但这似乎相当笨拙。 我宁愿写这样简单的东西: return tasks.Select(async task => await task).ToList(); …但这不能编译。 我错过了什么? 还是这样expression事物是不可能的?

LINQPad如何引用其他类,例如LINQ in Action示例中的书籍

我正在使用LINQPad在我正在build立的应用程序中创buildLINQ查询。 我注意到,在下载的LINQ in Action示例中,例如4.04,intellisense显示了一个“Books”类,但在LINQPad工具中没有看到任何引用或“ using ”语句,下面是示例: List<Book> books = new List<Book>() { new Book { Title="LINQ in Action" }, new Book { Title="LINQ for Fun" }, new Book { Title="Extreme LINQ" } }; var titles = books .Where(book => book.Title.Contains("Action")) .Select(book => book.Title); titles.Dump(); 在“LinqBooks.Common,Business Objects, Book.linq ”这个类似乎被定义的地方: public class Book { public IEnumerable<Author> Authors […]

好的方法来获得在C#中的字典的最高价值的关键

我试图得到在Dictionary<string, double> results的最大值的关键。 这是我迄今为止: double max = results.Max(kvp => kvp.Value); return results.Where(kvp => kvp.Value == max).Select(kvp => kvp.Key).First(); 但是,由于这看起来有点低效,我想知道是否有更好的方法来做到这一点。

如何获得Linq to Entity的最大ID?

我有一个表用户有一个标识列UserID ,现在什么是正确的Linq实体行代码,将返回我最大的UserID ? 我试过了: using (MyDBEntities db = new MyDBEntities()) { var User = db.Users.Last(); // or var User = db.Users.Max(); return user.UserID; } 但是Last和Max似乎不被支持。 有任何想法吗?

如何快速删除列表中的项目

我正在寻找一种方法来快速从C# List<T>删除项目。 该文档指出, List.Remove()和List.RemoveAt()操作都是O(n) List.Remove List.RemoveAt 这严重影响了我的应用程序。 我写了几个不同的删除方法,并在一个List<String>上testing了它们全部500,000个项目。 testing用例如下所示… 概观 我写了一个方法,可以生成一个简单的包含每个数字(“1”,“2”,“3”,…)的string表示的string列表。 然后我试图remove列表remove每一个第五项。 以下是用于生成列表的方法: private List<String> GetList(int size) { List<String> myList = new List<String>(); for (int i = 0; i < size; i++) myList.Add(i.ToString()); return myList; } testing1:RemoveAt() 这是我用来testingRemoveAt()方法的testing。 private void RemoveTest1(ref List<String> list) { for (int i = 0; i < list.Count; i++) if (i […]

检查一个IEnumerable是否包含另一个IEnumerable的所有元素

比较两个集合中每个元素的字段/属性时,确定一个IEnumerable是否包含另一个IEnumerable的所有元素的最快方法是什么? public class Item { public string Value; public Item(string value) { Value = value; } } //example usage Item[] List1 = {new Item("1"),new Item("a")}; Item[] List2 = {new Item("a"),new Item("b"),new Item("c"),new Item("1")}; bool Contains(IEnumerable<Item> list1, IEnumerable<Item>, list2) { var list1Values = list1.Select(item => item.Value); var list2Values = list2.Select(item => item.Value); return //are ALL of […]

C#/ Linq:将映射函数应用于IEnumerable中的每个元素?

我一直在寻找一种方法来使用映射函数(以Linq兼容的方式)将IEnumerable的每个元素转换成别的东西,但是我没有find任何东西。 对于一个(非常简单的)例子,它应该能够做类似的事情 IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 }; IEnumerable<string> strings = integers.Transform(i => i.ToString()); 但我没有find任何东西。 我的意思是,编写一个扩展方法是非常简单的(基本上,它只需要将源枚举器封装到一个新的类中,然后编写一些委托给它的样板代码),但是我期望这是一个相当基本的操作,写自己感觉就像重新发明轮子 – 我不能动摇这种感觉,可能有一个我应该使用的内置方式,我只是太盲目,看不到它。 所以… Linq有什么东西可以让我做上面描述的吗?

LINQ:select对象不包含列表中的项目

我在这里用LINQ语法挣扎…以为我会把它扔在这里。 我无法find我正在寻找什么地方。 好的,说我有这个: public class Bar { public int BarId { get; set; } } public class Foo { public List<Bar> BarList { get; set; } } List<Foo> fooBunch = GetABunchOfFoos(); //let's just assume I'm getting more than one List<Foo> fooSelect = new List<Foo>; List<Bar> filterBars = GetAFewBars(); //assume I'm getting like 2 or 3 […]

更容易的方式来填充整数在.NET中的列表

可能重复: 在.NET中填充整数列表 有没有更简单或更优雅的方式来初始化C#中的整数列表除此之外呢? List<int> numberList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 要么 for(int i = 1; i <= 10; i++) { numberList.Add(i); } 这似乎不太实际 – 特别是如果列表包含大量的值。 循环是一个更实际的解决scheme吗? 谢谢, CC

LINQ to SQL Where子句可选标准

我正在使用LINQ to SQL查询,并遇到了一个问题,我有4个可选字段来过滤数据结果。 通过可选,我的意思是可以select是否input一个值。 具体来说,几个文本框可以有一个值或有一个空string和一些下拉列表,可能有一个值select或可能不… 例如: using (TagsModelDataContext db = new TagsModelDataContext()) { var query = from tags in db.TagsHeaders where tags.CST.Equals(this.SelectedCust.CustCode.ToUpper()) && Utility.GetDate(DateTime.Parse(this.txtOrderDateFrom.Text)) <= tags.ORDDTE && Utility.GetDate(DateTime.Parse(this.txtOrderDateTo.Text)) >= tags.ORDDTE select tags; this.Results = query.ToADOTable(rec => new object[] { query }); } 现在我需要添加下面的字段/filter,但只有当它们是由用户提供的。 产品编号 – 来自另一个可以join到标签头的表。 采购订单编号 – 标签头表中的一个字段。 订单编号 – 与PO#类似,只是不同的列。 产品状态 – 如果用户从下拉列表中select此项,则需要在此处应用选定的值。 […]