小编Che*_*hen的帖子

C#对象列表,如何获取属性的总和

我有一个对象列表.单个对象条目的一个属性是金额.我如何得到金额的总和?

如果我的列表是double类型,我可能会做这样的事情:

double total = myList.Sum();
Run Code Online (Sandbox Code Playgroud)

但是我想要类似的东西,但这种语法是不正确的.

double total = myList.amount.Sum();
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我希望尽可能使用Sum函数,而不是循环并计算值.

c# sum list

145
推荐指数
4
解决办法
18万
查看次数

如何在EF中更新父实体时添加/更新子实体

这两个实体是一对多的关系(由代码第一流畅的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)

目前我有两个想法:

  1. 获取一个名为existingby 的跟踪父实体model.Id,并将值model逐个赋值给实体.这听起来很愚蠢.在model.Children我不知道哪个孩子是新的,哪个孩子被修改(甚至删除).

  2. 通过创建一个新的父实体model …

c# asp.net-mvc entity-framework asp.net-web-api

134
推荐指数
6
解决办法
10万
查看次数

为什么"十进制"不是有效的属性参数类型?

这真的令人难以置信,但真实.此代码不起作用:

[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)

.net c# attributes

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

如何使用linq或lambda表达式连接两个列表

我有两个列表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)

c#

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

为什么ArrayList没有标记为[已废弃]?

经过深思熟虑并着眼于实施ArrayList,我个人真的想说它已经过时了,我没有理由在2.0之后使用这个类.但由于它没有被标记为[Obsolete],是否有任何我不知道的用法,比使用泛型类更好?如果是,请举个例子.谢谢.

编辑让我们以List<T>一个例子来说,它提供了所有函数ArrayList,并且它是强类型的.那么我们什么时候需要使用ArrayList?也许有时它会有更好的表现?我不知道.如果你能告诉我一些特别的东西,我感激不尽ArrayList.

.net c# generics arraylist obsolete

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

将Expression <T,bool>转换为String

我需要一种方法来在将来的某个时刻重新创建动态生成的报告.简而言之,我需要将特定的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)

有没有办法做到这一点?

c# expression dynamic-linq

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

Enumerable.Single的执行不好?

我在反射器的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)

.net c# linq algorithm

34
推荐指数
2
解决办法
1747
查看次数

编译器为匿名方法生成了错误的代码[MS BUG FIXED]

请参阅以下代码:

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)

.net c# delegates cil anonymous-methods

30
推荐指数
1
解决办法
1040
查看次数

如何创建HttpPostedFileBase实例(或其继承类型)

目前我有一个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)

.net c# asp.net-mvc asp.net-mvc-3

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

C#中数组的神奇之处是什么?

int[] a = new int[5];
string[] b = new string[1];
Run Code Online (Sandbox Code Playgroud)

两者的类型ab继承自抽象System.Array,但内置库中没有真正的类(似乎有一些运行时类型,你找不到类型定义类的一个int[]).你能告诉我编译时会发生什么吗?为什么他们(c#团队)制作这个设计(我的意思是为什么它不是这样的Array<T>,而是他们使用带编译器魔法的抽象类)?

c# arrays clr runtime

22
推荐指数
3
解决办法
1837
查看次数