这是我当前的月份:
model.SalesForMonth = orders.Where(o => o.DateOfPayment.Value.Month == DateTime.Now.Month)
.Select(o => o.Total)
.Sum();
Run Code Online (Sandbox Code Playgroud)
这不符合预期,因为它也取得了去年同月发生的订单.
当然我可以比较年和月,但必须有一个我不熟悉的更具表现力的解决方案.
我怎样才能使用Linq干净利落地做到这一点?(不确定是否相关但是orders来自实体框架的IQueryable)
我有一个表,我想在实体框架工作中执行以下操作:
1-从对象返回一些列而不是所有列(我为这个新类型创建了新类,只包含我需要的列,并在select语句中返回其中的值.
2-返回列应按某些列分组,其中两列将包含计数值.(这是我的问题).
有关更多说明:我需要在Entity Framework中对我的数据集的可共享对象映射以下查询:
select SUM (Col1) SUM_Col1, SUM (Col2) SUM_Col2, COUNT (*) RECORDS, Col3, Col4, Col5
from myTable
where col3 = 'some value'
group by Col3, Col4, Col5;
Run Code Online (Sandbox Code Playgroud)
我的分组审判如下:
query = from record in context.tables
group record by new
{
record.Col3,
record.Col4,
record.Col5,
} into g
select new QueryResult
{
Col1 = (need Sum of Col1 here),
Col2 = (need Sumn of Col2 here),
Col3 = g.Key.Col3,
Col4 = g.Key.Col4,
Col5 = g.Key.Col5,
Col6 = ( need count …Run Code Online (Sandbox Code Playgroud) 我有一个方法:
public void ExterminateCuddlyKittens(IQueryable<Kitten> data)
{
data = data.Where(c => !c.Cuddly);
}
Run Code Online (Sandbox Code Playgroud)
它收养了一些小猫,并带走了没有的小猫Cuddly = true。
我用这段代码测试了这个方法:
List<Kitten> myKittens = new List<Kitten>();
myKittens.Add(new Kitten() { Cuddly = true; });
ExterminateCuddlyKittens(myKittens.AsQueryable());
Assert.AreEqual(0, myKittens.Count);
Run Code Online (Sandbox Code Playgroud)
调试我的方法时,智能感知显示它正确地消灭了小猫,并且在方法末尾有一个空集合。
然而,当我们回到测试中时,myKittens 的计数仍然为 1,并且小猫逃脱了灭绝。
我不知道为什么,作为data参考,不是吗?因此,我希望修改集合能够持续下去。但是我不确定是否AsQueryable正在创建副本或其他内容。
有任何想法吗?
捎带一个非常相似的问题 ......
我需要从ViewModel生成一个表达式作为搜索谓词传递.我需要能够根据用户提供的内容包含/排除查询参数.例:IQueryable.Where
public class StoresFilter
{
public int[] Ids { get; set; }
[StringLength(150)]
public string Name { get; set; }
[StringLength(5)]
public string Abbreviation { get; set; }
[Display(Name = "Show all")]
public bool ShowAll { get; set; } = true;
public Expression<Func<Store, bool>> ToExpression()
{
List<Expression<Func<Store, bool>>> expressions = new List<Expression<Func<Store, bool>>>();
if (Ids != null && Ids.Length > 0)
{
expressions.Add(x => Ids.Contains(x.Id));
}
if (Name.HasValue())
{
expressions.Add(x => x.Name.Contains(Name)); …Run Code Online (Sandbox Code Playgroud) 我有and和IQueryable<int>and 在较早的处理阶段IQueryable<int?>使用a从中删除了空值Where()。我现在希望UNION()在两个可查询对象之间执行a ,但是因为一个是可空类型,而另一个则不能。
我该如何解决?
c# ×5
iqueryable ×5
date-range ×1
datetime ×1
func ×1
ienumerable ×1
linq ×1
nullable ×1
sql ×1