gpt4 book ai didi

c# - 将 Linq 查询结果与数组进行比较

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:16 24 4
gpt4 key购买 nike

我有一个接受数据表的方法,我需要将数据表中的列与数据库中一行中的值进行比较。我的方法看起来像这样。

public bool CheckIfDataTableAndDataInTableMatch(DataTable resultTable, int selectedConfig)
{ var selecetedConfigCount = DataAccess.Configurations.FindByExp(x => x.ConfigId == selectedConfigId)
.FirstOrDefault();
var dataTableColumnNames = resultTable.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToArray();

}

我的查询结果是这样的。 enter image description here

从我的数据表中获取列名的结果是这样的。 enter image description here

我正在尝试做的是确保查询中的值与数据表中的列相匹配。我将如何比较这些?查询的结果将始终是一行。

最佳答案

看起来您的模型 (selectedConfigCount) 是已知的,而数据表中的列不是,因此您可以通过几种方式解决此问题:

您可以手动检查每个字段:

var exists = dataTableColumnNames.Any(n => n == selectedConfigCount.EE_City__);

确保更改比较以满足您的要求(例如小写等)。

或者,如果您想自动执行此操作,您可以创建一个属性并用它装饰模型的属性。然后,您可以使用反射遍历属性以查找此属性,并使用它在列名列表中查找匹配项。

更新:

创建自定义属性:

public class ColumnMatchAttribute : Attribute
{

}

将此属性应用于模型的属性:

[ColumnMatch]
public string EE_City__ { get; set; }

有一个检查属性并为您比较的函数:

    private static bool CompareFields(Config selectedConfigCount, DataTable table)
{
var columns = table.Columns.Cast<DataColumn>().Select(c => c.ColumnName);
var properties = selectedConfigCount.GetType().GetProperties();
foreach (var property in properties)
{
var attributes = property.GetCustomAttributes(true);
foreach (var attribute in attributes)
{
if (attribute.GetType() == typeof(ColumnMatchAttribute))
{
//This property should be compared
var value = property.GetValue(selectedConfigCount);
if (value == null)
return false;

//Change this comparison to meet your requirements
if (!columns.Any(n => n == value.ToString()))
return false;
}
}
}
return true;
}

关于c# - 将 Linq 查询结果与数组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45239250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com