我试图结合两个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这里?
我正在编写一个工具,该工具的第一部分是收集公共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) 我需要检查密钥是否存在,以及相应的字典中的添加或更新.
if (dict.ContainsKey("Key1"))
dict["Key1"] = "Value1";
else
dict.Add("Key1", "Value1");
Run Code Online (Sandbox Code Playgroud)
我可以使用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".这是为什么?
我有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 arrFirst和arrSecond,结果是3
对于arrFirst和arrThird,结果是2
我找到的所有代码都是比较两个数组并返回它们是否相同.
但我想要的是有多少匹配.
我可以循环方式.
但我认为这将花费太多时间,我想知道是否有更快的方法.
谢谢..
这几乎无疑是一个愚蠢的问题.在我的辩护中我生病了.无论如何.
我有一个内存列表中的对象.我使用下面的表达式从我的对象列表中提取出我感兴趣的字符串:
var myStrings = myListOfObjects.Select(r => r.MyString);
Run Code Online (Sandbox Code Playgroud)
这为我提供了一个IEnumerable字符串.myStrings稍后会在我的代码中重复使用多次.我想知道的是,在使用它之前执行ToArray或ToList(即"贪婪"运算符)是否有任何性能优势?(所以我的操作将直接针对数组/列表.)
对于它的价值,myStrings在使用时将被完整地重复使用.
是否可以解决以下问题而不使用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) 假设我有2个集合:
1){1, 2, 3, 5}
2){2, 5}
我想从第一个集合中删除第二个集合中出现的每个项目,所以我会得到:
{1, 3}
Run Code Online (Sandbox Code Playgroud)
问题:
JoinOP 做这个(更好的扩展方法语法)? 编辑:
同时迭代两个集合您可以使用嵌套from子句:
from boy in boys
from girl in girls
select boy + "+" + girl
Run Code Online (Sandbox Code Playgroud)
我第一次发现这个语法是必要的:)
我需要从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中删除项目.
我有这个案子:
我从这样的列表中创建一个数组:
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动态解决这种情况吗?
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