标签: linq-to-objects

从查找中获取密钥

如何从通过.ToLookup()方法创建的Lookup <>获取密钥集合?

我有一个查找,它将int值映射到自定义类的实例组.我需要查找包含的所有int键的集合.有什么方法可以做到这一点,还是我必须单独收集和保存它们?

.net c# linq lookup linq-to-objects

39
推荐指数
2
解决办法
1万
查看次数

使用Entity Framework,最好使用.First()或.Take(1)作为"TOP 1"吗?

我们正在实现一些EF数据存储库,我们有一些查询包括 TOP 1

我已经阅读了许多建议使用.Take(1)
我正在审查的代码使用的帖子.First()

我知道这两个都会为对象赋值产生相同的结果,但它们是否实际上都解析为同一个查询?查询数据库时,它实际上是否同时TOP 1用于两个请求?或者他们会将查询完整地执行到可枚举中,然后只需获取集合中的第一个条目?

此外,如果我们使用.FirstOrDefault()那么为什么我们应该期待任何不同的行为?我知道,当使用一个IEnumerable,调用一个.First()在一个空的集合会抛出,但如果这实际上只更改查询包括TOP 1话,我应该会完全没有功能上的差异之间.First().FirstOrDefault()....对不对?

或者,是否有比这些Enumerable扩展更好的方法来执行查询TOP 1

sql linq ienumerable linq-to-objects entity-framework

38
推荐指数
2
解决办法
3万
查看次数

"嵌套foreach"vs"lambda/linq查询"性能(LINQ-to-Objects)

从性能的角度来看,你应该使用"嵌套的foreach"或"lambda/linq查询"?

c# foreach lambda linq-to-objects

37
推荐指数
3
解决办法
3万
查看次数

使用LINQ进行递归控制搜索

如果我想在ASP.NET页面上找到选中的复选框,我可以使用以下LINQ查询.

var checkBoxes = this.Controls
                     .OfType<CheckBox>()
                     .TakeWhile<CheckBox>(cb => cb.Checked);
Run Code Online (Sandbox Code Playgroud)

如果复选框嵌套在当前控件集合中,那么工作正常,但我想知道如何通过向下钻取到顶级控件的控件集合来扩展搜索.

这里问的问题是:

查找在ASP.NET中使用某个接口的控件

并且收到了非LINQ答案,我已经有自己的类型和ID作为扩展方法的递归控件搜索版本,但我只是想知道在LINQ中这样做有多容易?

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

35
推荐指数
1
解决办法
1万
查看次数

LINQ to SQL和有序结果的运行总计

我想在a中显示客户的会计历史记录DataGridView,我希望有一个列显示其余额的运行总计.我这样做的旧方法是获取数据,循环数据,逐行添加行DataGridView并计算当时的运行总数.瘸.我宁愿使用LINQ to SQL,或LINQ如果不能使用LINQ to SQL,来计算运行总数,这样我就可以设置DataGridView.DataSource为我的数据.

这是我正在拍摄的一个超级简化的例子.说我有以下课程.

class Item
{
    public DateTime Date { get; set; }
    public decimal Amount { get; set; }
    public decimal RunningTotal { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个可以生成如下结果的L2S或LINQ语句:

   Date       Amount  RunningTotal
12-01-2009      5          5
12-02-2009     -5          0
12-02-2009     10         10
12-03-2009      5         15
12-04-2009    -15          0
Run Code Online (Sandbox Code Playgroud)

请注意,可能有多个具有相同日期的项目(12-02-2009).在计算运行总计之前,应按日期对结果进行排序.我猜这意味着我需要两个语句,一个用于获取数据并对其进行排序,另一个用于执行运行总计算.

我希望Aggregate能做到这一点,但它并不像我希望的那样有效.或者也许我只是想不出来.

这个问题似乎跟我想要的一样,但我不知道接受/唯一的答案是如何解决我的问题的.

关于如何解决这个问题的任何想法?

编辑 结合Alex和DOK的答案,这就是我最终得到的结果:

decimal runningTotal = 0;
var results = FetchDataFromDatabase()
    .OrderBy(item => item.Date)
    .Select(item => new …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects linq-to-sql

35
推荐指数
3
解决办法
1万
查看次数

序列在linq中不包含任何元素异常,甚至不使用Single

我没有Single在LINQ下面使用,但我仍然得到一个'Sequence contains no elements'异常:

allNames = StockCollection.Where((s) => s.Name.IndexOf("A") == 0)
                          .Select((s) => s.Name)
                          .Aggregate((namesInfo, name) => namesInfo += ", " + name);
Run Code Online (Sandbox Code Playgroud)

如果没有以名称开头的库存,则会出现此异常'A'.

似乎一种扩展方法期望至少一个元素满足条件,但这不是预期的.

能否请您提出解决此问题的最佳解决方案?

提前致谢.

c# linq string linq-to-objects sequences

35
推荐指数
3
解决办法
1万
查看次数

LINQ返回List中与其他列表中的任何名称(字符串)匹配的项目

我有2个清单.1是产品的集合.另一个是商店里的产品系列.

如果名称与产品中的任何名称匹配,我需要能够返回所有shopProducts.

我有这个,但似乎没有用.有任何想法吗?

    var products = shopProducts.Where(p => p.Name.Any(listOfProducts.
             Select(l => l.Name).ToList())).ToList();
Run Code Online (Sandbox Code Playgroud)

我需要说给我所有其他名单中存在名称的商店产品.

c# linq linq-to-objects linq-to-sql

32
推荐指数
2
解决办法
5万
查看次数

Linq除了自定义IEqualityComparer

我试图找到两个通用列表之间的区别,如下例所示.即使t1和t2包含相同的属性,它们也不是同一个对象,所以我需要实现IEqualityComparer.

这似乎与这个例子有关,但真正的类有几个其他属性,我也需要对其他一些类做同样的事情.

所以我想知道我是否正在重新发明轮子?

是否有更简单的方法来比较两个对象的所有属性?目前,我真的只需要处理包含简单类型的类,但是我会有一个比较器,它可以处理包含其他类实例的类.

void Main()
{
    var t1 = new Sizes { Name = "Test" , Size = 1} ;
    var t2 = new Sizes { Name = "Test" , Size = 1} ;

    var list1 = new List<Sizes>();
    var list2 = new List<Sizes>();
    list1.Add(t1);
    list2.Add(t2);

    var differences = list2.Except(list1 , new SizesComparer());    
    // differences should be empty.
}


public class Sizes  
{
    public string Name { get;  set; }
    public int    Size { get;  set; }
}

public …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-objects iequalitycomparer

28
推荐指数
2
解决办法
3万
查看次数

LINQ - SkipWhile坏了吗?

我有点惊讶地发现以下代码的结果,我只想从一系列int中删除所有3:

var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.SkipWhile(i => i == 3); // Oh noes! Returns { 1, 1, 2, 3 }
Run Code Online (Sandbox Code Playgroud)

为什么不跳过3?

我的下一个想法是,好吧,Except运算符可以解决这个问题:

var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.Except(i => i == 3); // Oh noes! Returns { 1, 2 }
Run Code Online (Sandbox Code Playgroud)

综上所述,

  • 除了删除3,但也删除非不同的元素.格儿.
  • SkipWhile不跳过最后一个元素,即使它与条件匹配.格儿.

有人可以解释为什么SkipWhile不会跳过最后一个元素吗?任何人都可以建议我可以用什么LINQ运算符从上面的序列中删除'3'?

c# linq linq-to-objects

27
推荐指数
2
解决办法
1万
查看次数

从Int数组转换为字符串数组

当我将整数数组转换为字符串数组时,我使用for循环以较长的方式进行,如下面的示例代码中所述.这有简写吗?

现有的问题和答案SO大约int[]string(不string[]).所以他们没有帮助.

虽然我发现这个将一个int数组转换为一个String数组的答案,但该平台是Java而不是C#.同样的方法无法实现!

        int[] intarray =  { 198, 200, 354, 14, 540 };
        Array.Sort(intarray);
        string[] stringarray = { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty};

        for (int i = 0; i < intarray.Length; i++)
        {
            stringarray[i] = intarray[i].ToString();
        }
Run Code Online (Sandbox Code Playgroud)

.net c# linq arrays linq-to-objects

27
推荐指数
3
解决办法
5万
查看次数