我正在尝试为我的搜索创建一个通用方法,但我不知道如何从我的类中返回字段列表.
假设我有一堂课:
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)产生了不同
你能告诉我哪一个列表连接方法更有效,为什么?还是性能相同?有没有其他方法来处理这种情况(基于字段属性加入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) 例如,我有一个具有这些属性的对象列表
{ 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)
但我不知道接下来该做什么