标签: linq

为什么c#Linq在包含List的List中使用引用而不是值

我遇到这个简单代码的问题,我不明白为什么c#这样做.

问题似乎是c#在列表中使用列表时使用Linq表达式引用而不是值.

在数字循环中,我根据列表选择数字,它们都存在,所以所有数字都应该添加到列表{1,2,3}中.

当您在控制台中看到数字循环中显示{1,2,3}的输出时,行为正常.

问题在于列表的循环,在这里似乎Linq只将最后一个数字添加到列表中,因此它输出{3,3,3}.

我知道我不需要列表中的整数列表,但这只是为了证明这一点非常奇怪,这是一个已知的"错误"吗?

编辑:这似乎是它应该在5.0之前的c#中工作.在C#5.0(VS2012 +编译器)中,此行为已被修改为我所期望的

static void Main()
{
    var list = new List<IEnumerable<int>>();
    var numbers = new[] {1, 2, 3};
    var numbers2 = new[] {1, 2, 3};

    foreach (var number in numbers)
    {
        var result = from s in numbers2
                     where s == number
                     select s;

        Console.WriteLine(result.First()); // outputs {1,2,3}
        list.Add(result);
    }

    foreach (var num in list)
    {
        Console.WriteLine(num.First()); // outputs {3,3,3}
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

1 2 3 3 3 3

c# linq list

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

将连续日期组合到范围中

我有一个对象列表

public class sample
{
 public DateTime Date;
 public string content;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够创建一个新对象列表

public class sampleWithIntervals
{
 public DateTime startDate;
 public DateTime endDate;
 public string content;
}
Run Code Online (Sandbox Code Playgroud)

应根据内容将样本对象分组为间隔.间隔可以仅包括原始样本列表中包含的那些日期.我不知道如何在Linq做到这一点.

样本数据:

{"10/1/2013", "x"}
{"10/2/2013", "x"}
{"10/2/2013", "y"}
{"10/3/2013", "x"}
{"10/3/2013", "y"}
{"10/10/2013", "x"}
{"10/11/2013", "x"}
{"10/15/2013", "y"}
{"10/16/2013", "y"}
{"10/20/2013", "y"}

This should give me 
{"10/1/2013","10/3/2013", "x"}
{"10/2/2013","10/3/2013", "y"}
{"10/10/2013","10/11/2013", "x"}
{"10/15/2013","10/16/2013", "y"}
{"10/20/2013","10/20/2013", "y"}
Run Code Online (Sandbox Code Playgroud)

c# linq c#-4.0

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

Linq如何使用OR?

有人可以告诉我如何在LinQ语句上执行OR吗?例如,如果我有两个扩展方法:ByIdA()ByIdB().然后我想使用它们类似于:

var yada = _something.Entity.ByIdA().ByIdB();
Run Code Online (Sandbox Code Playgroud)

上面将调用两个并返回A和B都为真的行.如何编写它以使用OR并返回A或B为真的行?

我有一个带有子表B的Icollection的实体A,所以我想从A返回行,其中Ax = 1或者By = 1.

.net c# linq

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

Linq查询中的异常处理

我正在使用 ...

tmpLst = (from e in App.lstAllChilds where e.Id == Id select e).ToList();
Run Code Online (Sandbox Code Playgroud)

lstAllChilds列表在哪里,其中包含一些损坏的数据.

所以现在我要在这个查询中处理Try-Catch块.
请帮忙.

c# linq exception-handling try-catch

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

使用经度和纬度查找给定距离内的所有附近客户

我有一个包含客户经度和纬度的数据库,我有一个搜索表单,其中用户将输入log/lat和距离下拉列表包含50英里,100英里,....当用户点击搜索时我想写一个linq查询到从这个距离半径的db中获取所有客户.如何使用C#和linq进行此操作?

更新:
我发现这个/sf/answers/115805581/,但这给出了一个方形而不是半径

c# linq entity-framework geolocation

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

比较两个列表中对象的id,并获取包含在两个列表中都出现id的对象的对象列表

我已经和它斗争了很长时间.我有两个集合:MyRepository.All和MyCollection,它们都拥有具有ID属性的对象集合.我需要从MyRepository.All获取对象列表的结果,其中只包含id等于MyCollection的对象'的对象.

ICollection MyCollection //作为方法的参数

var result = MyRepository.All.Where(r=>r.id==MyCollection.???.id).ToList();
Run Code Online (Sandbox Code Playgroud)

我需要更换??? 用一些linq来完成这件事.香港专业教育学院尝试不同的地方,选择caluses,excist和intersect等等.

c# linq collections compare

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

用于LINQ静态方法的C++/CLI Lambda选择器

我在C++/CLI中有这个(Visual Studio 2012)

Enumerable::Max((IEnumerable<IFoo^>^) Foos, [](IFoo^ f){return f->Id;});
Run Code Online (Sandbox Code Playgroud)

但它会导致此错误:

没有重载函数的实例"System :: Linq :: Enumerable :: Max"匹配参数列表

它让我感到沮丧,因为lambda没有任何问题.我需要以某种方式将它投射到Func吗?

c++ linq lambda c++-cli visual-studio-2012

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

了解LINQ的Where/Take的基本原理

我有一个List<String> myList.

我想把这个列表中的前10个项目与某些标准相匹配(.Contains("a")例如,让我们说).

我有:

Var results = myList.Where(o=>o.Contains("a")).Take(10);
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但LINQ执行了Where检索满足此条件的所有项目,然后只采取了前10个?或者这将以整个LINQ语句被考虑的方式编译(即它将执行Where但只到达到10项)?

c# linq performance loops take

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

应用"Join"方法的最佳方法是什么,一般类似于String.Join(...)的工作方式?

如果我有一个字符串数组,例如:var array = new[] { "the", "cat", "in", "the", "hat" },我想加入它们,每个单词之间有一个空格我可以简单地调用String.Join(" ", array).

但是,假设我有一个整数数组数组(就像我可以有一个字符数组数组).我想将它们组合成一个大型数组(展平它们),但同时在每个数组之间插入一个值.

var arrays = new[] { new[] { 1, 2, 3 }, new[] { 4, 5, 6 }, new { 7, 8, 9 }};

var result = SomeJoin(0, arrays); // result = { 1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9 }
Run Code Online (Sandbox Code Playgroud)

我写了一些东西,但它非常难看,我确信有更好,更清洁的方式.也许效率更高?

var result = new int[arrays.Sum(a => a.Length) + arrays.Length - 1];

int offset = 0;
foreach (var …
Run Code Online (Sandbox Code Playgroud)

c# linq arrays performance concatenation

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

Linq查询包含空值

var records = from entity in q1.question_papers
              select new
              {
                  QuestionPaperID = entity.QUESTION_PAPER_ID,
                  SubjectID = entity.SUBJECT_ID,       
                  PreviousAttempts = SubIdAtt.Where(c => c.SUBID == entity.SUBJECT_ID)
                                             .Select(c => c.ATT)   
                                             .FirstOrDefault(),
              };
Run Code Online (Sandbox Code Playgroud)

上面是我的linq查询,在PreviousAttempts字段中我得到null值,如果不满足where.因此,如果它包含null,我想要更改此0,而不是包含null,如果它不包含非null值,则恢复原始值.

我怎么能实现这一点,因为我无法改变PreviousAttempts每个记录?

c# linq

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