我遇到这个简单代码的问题,我不明白为什么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
我有一个对象列表
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) 有人可以告诉我如何在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.
我正在使用 ...
tmpLst = (from e in App.lstAllChilds where e.Id == Id select e).ToList();
Run Code Online (Sandbox Code Playgroud)
lstAllChilds列表在哪里,其中包含一些损坏的数据.
所以现在我要在这个查询中处理Try-Catch块.
请帮忙.
我有一个包含客户经度和纬度的数据库,我有一个搜索表单,其中用户将输入log/lat和距离下拉列表包含50英里,100英里,....当用户点击搜索时我想写一个linq查询到从这个距离半径的db中获取所有客户.如何使用C#和linq进行此操作?
更新:
我发现这个/sf/answers/115805581/,但这给出了一个方形而不是半径
我已经和它斗争了很长时间.我有两个集合: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++/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吗?
我有一个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项)?
如果我有一个字符串数组,例如: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) 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每个记录?