我有一个从外部应用程序返回的人员列表,我在我的本地应用程序中创建了一个排除列表,让我可以选择从列表中手动删除人员.
我有一个我创建的复合键,这两个键都很常见,我希望找到一种有效的方法,可以使用我的列表从列表中删除人员
例如
class Person
{
prop string compositeKey { get; set; }
}
class Exclusions
{
prop string compositeKey { get; set; }
}
List<Person> people = GetFromDB;
List<Exclusions> exclusions = GetFromOtherDB;
List<Person> filteredResults = People - exclustions using the composite key as a comparer
Run Code Online (Sandbox Code Playgroud)
我认为LINQ是这样做的理想方式,但是在尝试连接,扩展方法,使用产量等之后我还是遇到了麻烦.
如果这是SQL我会使用not in (?,?,?)查询.
如果我有A类和B类:
public class A
{
public int TotalCount;
public string Title;
}
public class B
{
public int Count;
public string Title;
}
Run Code Online (Sandbox Code Playgroud)
我有一个实例列表A实例,使用Linq创建和填充类型B列表的最有效方法是什么?
我正在开发一个面向.NET 3.5的C#应用程序.在其中,我有2个类似的词典,其中包含我的应用程序中特定元素集的验证标准.两个词典都有相同的签名.第一个字典具有默认设置,第二个字典包含一些用户定义的设置.
var default_settings = new Dictionary<string, MyElementSettings>();
var custom_settings = new Dictionary<string, MyElementSettings>();
Run Code Online (Sandbox Code Playgroud)
我想将2个词典合并为一个包含两个词典元素的词典.
我遇到的问题是两个字典都可能具有一些相同的键值.我想要的基本规则是将两个字典组合在一起,如果default_settings中已经存在custom_settings中的任何键,则custom_settings值将覆盖default_settings值.我拥有的最佳解决方案只是一个foreach循环,检查密钥是否存在于另一个字典中,如果不存在,则添加它.
foreach (var item in custom_settings)
{
if (default_settings.ContainsKey(item.Key))
default_settings[item.Key] = item.Value;
else
default_settings.Add(item.Key, item.Value);
}
Run Code Online (Sandbox Code Playgroud)
我已经完成了一些基本的LINQ查询,但我仍在努力学习更高级的东西.我已经看到了一些将合并2个字典的查询,但大多数都涉及将任何元素与重复键分组,或者仅返回仅包含重复键的集合/是否存在将模仿foreach循环行为的LINQ查询或表达式我在用?
var listair = empcon.OrderBy(x => x.CustomerConnection.OrderBy(y => y.Id)).ToList();
Run Code Online (Sandbox Code Playgroud)
当我使用此语句时,我得到异常"至少有一个对象必须实现IComparable"
我怎么解决这个问题?
我有一个可变长度的字符串数组.目前我有一个循环遍历数组以找到数组中最长的字符串.有没有什么方法可以使用LINQ以更高效和/或更清晰的方式编写它?
我在尝试使用asynclambda 时遇到以下错误IEnumerable.SelectMany:
var result = myEnumerable.SelectMany(async (c) => await Functions.GetDataAsync(c.Id));
Run Code Online (Sandbox Code Playgroud)
无法从用法推断出方法'IEnumerable System.Linq.Enumerable.SelectMany(此IEnumerable,Func>)'的类型参数.尝试显式指定类型参数
在哪里GetDataAsync定义为:
public interface IFunctions {
Task<IEnumerable<DataItem>> GetDataAsync(string itemId);
}
public class Functions : IFunctions {
public async Task<IEnumerable<DataItem>> GetDataAsync(string itemId) {
// return await httpCall();
}
}
Run Code Online (Sandbox Code Playgroud)
我想因为我的GetDataAsync方法实际上返回了一个Task<IEnumerable<T>>.但为什么Select工作,肯定它应该抛出相同的错误?
var result = myEnumerable.Select(async (c) => await Functions.GetDataAsync(c.Id));
Run Code Online (Sandbox Code Playgroud)
有没有办法解决?
更新 - 对于一个有思想的心态,你可以假设Aggregate仍会产生正常的结果,无论函数传递给它,包括在优化的情况下.
我编写了这个程序来构建一个从逗号分隔的0到19999之间的长整数字符串.
using System;
using System.Linq;
using System.Diagnostics;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
const int size = 20000;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
Enumerable.Range(0, size).Select(n => n.ToString()).Aggregate((a, b) => a + ", " + b);
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds + "ms");
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它说:
5116ms
Run Code Online (Sandbox Code Playgroud)
超过五秒钟,太可怕了.当然这是因为每次循环都会复制整个字符串.
但是,如果评论中指出了一个非常小的变化呢?
using System;
using System.Linq;
using System.Diagnostics;
namespace ConsoleApplication5
{
using MakeAggregateGoFaster; // <---- inserted this
class Program
{
static void Main(string[] args)
{
const int …Run Code Online (Sandbox Code Playgroud) 我有三张桌子.其中两个平等加入,但一个人需要加入左边.我在linq中找到了很多代码,但只在两个表之间.
这是我试图在LINQ中重新编码的SQL代码.
SELECT PRSN.NAME
,CO.NAME
,PROD.NAME
FROM PERSON PRSN
INNER JOIN COMPANY CO ON PRSN.PERSON_ID = CO.PERSON_ID
LEFT OUTER JOIN PRODUCT PROD ON PROD.PERSON_ID = PROD.PERSON_ID;
Run Code Online (Sandbox Code Playgroud)
这是我用作基础的LINQ代码片段.我只是无法通过LINQ和左外连接拼凑第三个表(我的示例SQL中的产品).样本位于两个表之间.谢谢你的任何提示.
var leftOuterJoinQuery =
from category in categories
join prod in products on category.ID equals prod.CategoryID into prodGroup
from item in prodGroup.DefaultIfEmpty(new Product{Name = String.Empty, CategoryID = 0})
select new { CatName = category.Name, ProdName = item.Name };
Run Code Online (Sandbox Code Playgroud)
迈克尔
假设我将人类实例添加到列表然后我需要使用linq查询列表.
List lst=new List();
lst.add(new person{ID=1,Name="jhon",salaty=2500});
lst.add(new person{ID=2,Name="Sena",salaty=1500});
lst.add(new person{ID=3,Name="Max",salaty=5500});
lst.add(new person{ID=4,Name="Gen",salaty=3500});
Run Code Online (Sandbox Code Playgroud)
现在我想用linq查询上面的列表.请指导我的示例代码.
假设我有一个(有序的)动物序列:
Eagle Elephant Tarantula Terrapin Tiger
我按第一封信分组:
Animals.GroupBy(animal => animal.First())
Run Code Online (Sandbox Code Playgroud)
IGrouping结果序列中s 的元素是否与输入序列的顺序相同?
linq-to-objects ×10
c# ×8
linq ×5
dictionary ×1
group-by ×1
ilookup ×1
lambda ×1
list ×1
optimization ×1