小编Pio*_*r P的帖子

获取类字段列表

我正在尝试为我的搜索创建一个通用方法,但我不知道如何从我的类中返回字段列表.

假设我有一堂课:

public class Table
    {
        [Key]
        public int ID { get; set; }

        public string Name { get; set; }

        public string Address { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

现在我想返回一个如下所示的列表:

"ID"
"Name"
"Address"
Run Code Online (Sandbox Code Playgroud)

我怎么做?

试过这样的事情:

 FieldInfo[] fields = typeof(T).GetFields(
            BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            string[] names = Array.ConvertAll<FieldInfo, string>(fields,
                delegate(FieldInfo field) { return field.Name; });
Run Code Online (Sandbox Code Playgroud)

但它在字段名称之后有一些不必要的文本

编辑

它不重复,因为在我的情况下GetProperties(). Select(f => f.Name)产生了不同

c# asp.net-mvc generic-programming

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

在公共字段上加入C#中两个列表的最有效方法是什么?

你能告诉我哪一个列表连接方法更有效,为什么?还是性能相同?有没有其他方法来处理这种情况(基于字段属性加入2个列表)?

我的代码:

public List<CombinedDatabaseStructure> Combine1(List<DatabaseStructure1> _Data1, List<DatabaseStructure2> _Data2)
{
    List<CombinedDatabaseStructure> combinedAll = new List<CombinedDatabaseStructure>();
    foreach (var row1 in _Data1)
    {
        foreach (var row2 in _Data2)
        {
            CombinedDatabaseStructure combined = new CombinedDatabaseStructure();
            if (row1.ID == row2.ID)
            {
                combined.DatabaseStructure1 = row1;
                combined.DatabaseStructure2 = row2;
                combinedAll.Add(combined);
            }
        }
    }

    return combinedAll;
}
Run Code Online (Sandbox Code Playgroud)

代码2:

public List<CombinedDatabaseStructure> Combine2(List<DatabaseStructure1> _Data1, List<DatabaseStructure2> _Data2)
{
    var joined = from item1 in _Data1.AsEnumerable() 
                 join item2 in _Data2.AsEnumerable() on item1.ID equals item2.ID
                 select new CombinedDatabaseStructure (item1,item2);

    return  joined.ToList<CombinedDatabaseStructure>();
}
Run Code Online (Sandbox Code Playgroud)

c# linq

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

如果有任何重复项,请选择具有特定属性的第一个元素,否则选择第一个元素

例如,我有一个具有这些属性的对象列表

{ ID: "1", STATUS: "INA" }
{ ID: "1", STATUS: "ACT" } 
{ ID: "2", STATUS: "INA" } 
{ ID: "2", STATUS: "BLO" }
Run Code Online (Sandbox Code Playgroud)

现在我想通过ID对它们进行分组,以减少重复,但是当找到重复项时,我想检查是否有任何状态是ACT,如果是ACT我想选择此记录,但是如果没有ACT状态我想要选择第一次出现的副本.

在上面的例子中,我想选择

{ ID: "1", STATUS: "ACT" } //since it has ACT
{ ID: "2", STATUS: "INA" } //since it is first duplicate found
Run Code Online (Sandbox Code Playgroud)

我知道第一步就是

var NoDup = from l in list.AsEnumerable()
                  group l by l.ID into c
Run Code Online (Sandbox Code Playgroud)

但我不知道接下来该做什么

c# linq

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

标签 统计

c# ×3

linq ×2

asp.net-mvc ×1

generic-programming ×1