我有一个对象列表.单个对象条目的一个属性是金额.我如何得到金额的总和?
如果我的列表是double类型,我可能会做这样的事情:
double total = myList.Sum();
Run Code Online (Sandbox Code Playgroud)
但是我想要类似的东西,但这种语法是不正确的.
double total = myList.amount.Sum();
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我希望尽可能使用Sum函数,而不是循环并计算值.
这两个实体是一对多的关系(由代码第一流畅的api构建).
public class Parent
{
public Parent()
{
this.Children = new List<Child>();
}
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的WebApi控制器中,我有动作创建父实体(工作正常)并更新父实体(有一些问题).更新操作如下所示:
public void Update(UpdateParentModel model)
{
//what should be done here?
}
Run Code Online (Sandbox Code Playgroud)
目前我有两个想法:
获取一个名为existing
by 的跟踪父实体model.Id
,并将值model
逐个赋值给实体.这听起来很愚蠢.在model.Children
我不知道哪个孩子是新的,哪个孩子被修改(甚至删除).
通过创建一个新的父实体model …
这真的令人难以置信,但真实.此代码不起作用:
[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field)]
public class Range : Attribute
{
public decimal Max { get; set; }
public decimal Min { get; set; }
}
public class Item
{
[Range(Min=0m,Max=1000m)] //compile error:'Min' is not a valid named attribute argument because it is not a valid attribute parameter type
public decimal Total { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效:
[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field)]
public class Range : Attribute
{
public double Max { get; set; }
public double Min { get; set; }
}
public class Item …
Run Code Online (Sandbox Code Playgroud) 我有两个列表List<WorkOrder>
,List<PlannedWork>
我想加入工作订单号上的两个列表,详情如下.换句话说,我有一份计划工作清单,但我需要知道workOrderNumber工作的描述.
我是linq和lambda表达式的新手,我还没有把头缠在他们身边.
class WorkOrder
{
public int WorkOrderNumber { get; set; }
public string WorkDescription { get; set; }
}
class PlannedWork
{
public int WorkOrderNumber { get; set; }
public DateTime ScheduledDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 经过深思熟虑并着眼于实施ArrayList
,我个人真的想说它已经过时了,我没有理由在2.0之后使用这个类.但由于它没有被标记为[Obsolete]
,是否有任何我不知道的用法,比使用泛型类更好?如果是,请举个例子.谢谢.
编辑让我们以List<T>
一个例子来说,它提供了所有函数ArrayList
,并且它是强类型的.那么我们什么时候需要使用ArrayList
?也许有时它会有更好的表现?我不知道.如果你能告诉我一些特别的东西,我感激不尽ArrayList
.
我需要一种方法来在将来的某个时刻重新创建动态生成的报告.简而言之,我需要将特定的linq查询(每个报告不同)存储到数据库中,然后使用动态Linq执行查询.
这一切都很好,但我找不到将表达式转换为字符串的方法.
如:
Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);
Run Code Online (Sandbox Code Playgroud)
应成为:
"Product.Id > 5 && Product.Warranty != false"
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我在反射器的Enumerable.cs中遇到了这个实现.
public static TSource Single<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
//check parameters
TSource local = default(TSource);
long num = 0L;
foreach (TSource local2 in source)
{
if (predicate(local2))
{
local = local2;
num += 1L;
//I think they should do something here like:
//if (num >= 2L) throw Error.MoreThanOneMatch();
//no necessary to continue
}
}
//return different results by num's value
}
Run Code Online (Sandbox Code Playgroud)
我认为如果有超过2个项目符合条件,他们应该打破循环,为什么他们总是遍历整个集合?如果反射器不正确地拆卸了dll,我会写一个简单的测试:
class DataItem
{
private int _num;
public DataItem(int num)
{
_num = num;
}
public int …
Run Code Online (Sandbox Code Playgroud) 请参阅以下代码:
public abstract class Base
{
public virtual void Foo<T>() where T : class
{
Console.WriteLine("base");
}
}
public class Derived : Base
{
public override void Foo<T>()
{
Console.WriteLine("derived");
}
public void Bang()
{
Action bang = new Action(delegate { base.Foo<string>(); });
bang(); //VerificationException is thrown
}
}
Run Code Online (Sandbox Code Playgroud)
new Derived().Bang();
抛出一个例外.在Bang
我生成的方法生成的CIL里面:
call instance void ConsoleApp.Derived::'<>n__FabricatedMethod1'<string>()
Run Code Online (Sandbox Code Playgroud)
和编译器生成方法的签名:
method private hidebysig
instance void '<>n__FabricatedMethod1'<T> () cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
01 00 00 00
) …
Run Code Online (Sandbox Code Playgroud) 目前我有一个byte[]
包含图像文件的所有数据,只是想构建一个实例,HttpPostedFileBase
以便我可以使用现有的方法,而不是创建一个新的重载.
public ActionResult Save(HttpPostedFileBase file)
public ActionResult Save(byte[] data)
{
//Hope I can construct an instance of HttpPostedFileBase here and then
return Save(file);
//instead of writing a lot of similar codes
}
Run Code Online (Sandbox Code Playgroud) int[] a = new int[5];
string[] b = new string[1];
Run Code Online (Sandbox Code Playgroud)
两者的类型a
和b
继承自抽象System.Array
,但内置库中没有真正的类(似乎有一些运行时类型,你找不到类型定义类的一个int[]
).你能告诉我编译时会发生什么吗?为什么他们(c#团队)制作这个设计(我的意思是为什么它不是这样的Array<T>
,而是他们使用带编译器魔法的抽象类)?
c# ×10
.net ×5
asp.net-mvc ×2
algorithm ×1
arraylist ×1
arrays ×1
attributes ×1
cil ×1
clr ×1
delegates ×1
dynamic-linq ×1
expression ×1
generics ×1
linq ×1
list ×1
obsolete ×1
runtime ×1
sum ×1