标签: linq-to-objects

ToList().Linq查询中的Sort()给出了编译错误

我试图结合两个SortedDictionaries,将结果更改为a List<KeyvaluePair<string,string>>Sort()结果.以下语句抛出错误:

var combinedEntries = from p in leftDict.Union(rightDict).ToList().Sort(myComparer) select p;
Run Code Online (Sandbox Code Playgroud)

错误:无法找到源类型"void"的查询模式的实现.找不到"选择".

这不起作用,因为Sort()返回void.如果我分开声明,它的作用是:

var combinedEntries = from p in leftDict.Union(rightDict) select p;
List<KeyValuePair<string, string>> finalentries = combinedEntries.ToList();
finalentries.Sort(comparer);
Run Code Online (Sandbox Code Playgroud)

我知道sort是一种List类型的方法而不是IEnumerable,但我认为ToList()之前调用Sort()会解决这个问题.所以第一个问题是它可以像我在第一个声明中尝试一样使用吗?如果没有,我该如何利用orderby这里?

c# sorting linq-to-objects

0
推荐指数
1
解决办法
8273
查看次数

帮助Linq和Dictionary的ContainsKey方法

我正在编写一个工具,该工具的第一部分是收集公共API中的所有头文件.问题是,两个头文件有重复的文件名(但它们位于不同的文件夹中).这将在创建字典时导致问题.

最初我写了一个foreach循环来收集FileInfo实例到字典中.但是最近我正在学习LINQ,我想将foreach循环转换为LINQ语句.问题是当它执行时,它抱怨重复的文件名.

这是原始代码:

public Dictionary<String, FileDependency> GetSDKFiles(DirectoryInfo dir)
{
    Dictionary<String, FileDependency> list = new Dictionary<String, FileDependency>();
    foreach (FileInfo info in dir.EnumerateFiles("*.h", SearchOption.AllDirectories))
    {
        String key = info.Name.ToLower();
        if (list.ContainsKey(key) == false)
        {
            list.Add(key, new FileDependency(info.FullName));
        }
        else
        {
            Debug.Print("Duplicate key: {0}", info.Name);
            Debug.Print("  File: {0}", info.FullName);
            Debug.Print("  Have: {0}", list[key].FullFileName);
        }
    }

    return list;
}
Run Code Online (Sandbox Code Playgroud)

我尝试过像这样转向LINQ:

public Dictionary<String, FileDependency> GetSDKFilesLINQ(DirectoryInfo dir)
{
    var files = from info in dir.EnumerateFiles("*.h", SearchOption.AllDirectories)
                let key = info.Name.ToLower()
                let dep = new FileDependency(info.FullName)
                select …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects dictionary

0
推荐指数
1
解决办法
2204
查看次数

使用Linq添加或更新字典元素

我需要检查密钥是否存在,以及相应的字典中的添加或更新.

        if (dict.ContainsKey("Key1"))
            dict["Key1"] = "Value1";
        else
            dict.Add("Key1", "Value1");
Run Code Online (Sandbox Code Playgroud)

我可以使用Linq或其他方式简化此操作吗?

.net c# linq linq-to-objects

0
推荐指数
1
解决办法
4682
查看次数

为什么我的LINQ语句会抛出异常?

我正在使用HTML敏捷包来抓取一个网站.我正在寻找包含某些文本的"a"元素的所有div标签.以下是示例代码:

 var showLocations = (from div in document.DocumentNode.Descendants("div")
                                 from a in div.DescendantNodes().Where(x => x.Name == "a")
                                 where a.Attributes["href"].Value.Contains("show_locs=Y")
                                 select a).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

但是,如果找不到该元素,则不会返回null,而是抛出"Null Reference Exception".这是为什么?

c# linq linq-to-objects

0
推荐指数
1
解决办法
122
查看次数

获取两个数组的匹配数

我有2个阵列.

String[] arrFirst={"a","b","c","d","e"};
String[] arrSecond={"a","b","f","d","g"};
String[] arrThird={"a","f","g","h","e"};
Run Code Online (Sandbox Code Playgroud)

我希望结果像for arrFirstarrSecond,结果是3

对于arrFirstarrThird,结果是2

我找到的所有代码都是比较两个数组并返回它们是否相同.

但我想要的是有多少匹配.

我可以循环方式.

但我认为这将花费太多时间,我想知道是否有更快的方法.

谢谢..

.net c# linq asp.net linq-to-objects

0
推荐指数
1
解决办法
99
查看次数

LINQ to Objects - 在IEnumerable <string>上使用ToArray/ToList的任何性能优势

这几乎无疑是一个愚蠢的问题.在我的辩护中我生病了.无论如何.

我有一个内存列表中的对象.我使用下面的表达式从我的对象列表中提取出我感兴趣的字符串:

var myStrings = myListOfObjects.Select(r => r.MyString);
Run Code Online (Sandbox Code Playgroud)

这为我提供了一个IEnumerable字符串.myStrings稍后会在我的代码中重复使用多次.我想知道的是,在使用它之前执行ToArray或ToList(即"贪婪"运算符)是否有任何性能优势?(所以我的操作将直接针对数组/列表.)

对于它的价值,myStrings在使用时将被完整地重复使用.

linq ienumerable linq-to-objects tolist toarray

0
推荐指数
1
解决办法
915
查看次数

删除并重新排序列表元素

是否可以解决以下问题而不使用C#循环(foreach; for; while; etc)但只使用C#Linq或lambda表达式?

问题:给定一个Task对象列表和一个已删除的TaskIds列表.我想该列表只与那些元素更新去掉TaskID的名单,剩下的任务元素重新排序了.

细节:

(1*) Given a list of Task objects:

TaskId  Group   Name    Order


281        1    "abc"   1  
726        1    "dre"   2  // note: will be removed  
9891       1    "euf"   3  // note: will be removed  
87         1    "wop"   4  
932        1    "hjd"   5  

102        2    "fhl"   1  // note: will be removed  
44         2    "bgg"   2  
30         2    "qds"   3  
293        2    "djf"   4  // note: will be removed  
389        2    "hkd" …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects

0
推荐指数
1
解决办法
2046
查看次数

如何使用linq从第二个集合中删除第一个集合中出现的每个项目?

假设我有2个集合:

1){1, 2, 3, 5}
2){2, 5}

我想从第一个集合中删除第二个集合中出现的每个项目,所以我会得到:

{1, 3}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我怎么能用JoinOP 做这个(更好的扩展方法语法)?
  2. 有没有什么方法可以迭代两个集合,就像嵌套for/foreach循环一样?

编辑:
同时迭代两个集合您可以使用嵌套from子句:

from boy in boys
from girl in girls
select boy + "+" + girl
Run Code Online (Sandbox Code Playgroud)

我第一次发现这个语法是必要的:)

c# linq linq-to-objects

0
推荐指数
1
解决办法
107
查看次数

如何在List.ForEach()中使用条件?

我需要从HttpSession集合中删除项目.在以下代码中,myList包含与Session相同的项目.如果myList/Session中的项目不在itemsToRemove中,则应从会话集合中删除它们.

但是,我不确定lambda语法应该是什么样子.以下是不正确的.

myList.ForEach(x => !itemsToRemove.Contains(x) { Session.Remove(x) });
Run Code Online (Sandbox Code Playgroud)

任何想法如何使用lambda表达式将所有内容放在一行来完成此任务?

另外,有没有办法避免创建中间列表(myList)?我只是这样做,因为我在迭代它时不能从Session中删除项目.

.net c# linq linq-to-objects list

0
推荐指数
1
解决办法
165
查看次数

Linq与动力学"where参数"

我有这个案子:

我从这样的列表中创建一个数组:

String[] parameters = stringParametersToSearch.Split(' ');
Run Code Online (Sandbox Code Playgroud)

参数的数量可以在1到n之间变化,我必须在描述字段中搜索包含所有参数出现的对象

List<LookUpObject> result = 
        components.Where(o => o.LongDescription.Contains(parameters[0])).ToList<LookUpObject>();
Run Code Online (Sandbox Code Playgroud)

如果参数是1这样做,但如果它们有两个或更多?

目前为了解决这种情况,我使用一个IF,在其中我为多达五个参数(最多的实际情况)的情况构建LINQ表达式.

我可以使用LINQ动态解决这种情况吗?

c# linq linq-to-objects

0
推荐指数
1
解决办法
103
查看次数

标签 统计

linq-to-objects ×10

c# ×9

linq ×9

.net ×3

asp.net ×1

dictionary ×1

ienumerable ×1

list ×1

sorting ×1

toarray ×1

tolist ×1