Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Linq查询结果与数组进行比较_C#_Linq - Fatal编程技术网

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

C# 将Linq查询结果与数组进行比较,c#,linq,C#,Linq,我有一个接受数据表的方法,需要将数据表中的列与数据库中的行中的值进行比较。我的方法是这样的 public bool CheckIfDataTableAndDataInTableMatch(DataTable resultTable, int selectedConfig) { var selecetedConfigCount = DataAccess.Configurations.FindByExp(x => x.ConfigId == selectedConfigId)

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

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();

   }
public bool checkifdatatable和dataintablematch(DataTable resultable,int-selectedConfig)
{var selectedconfigcount=DataAccess.Configurations.FindByExp(x=>x.ConfigId==selectedConfigId)
.FirstOrDefault();
var dataTableColumnNames=resultTable.Columns.Cast()
.选择(x=>x.ColumnName)
.ToArray();
}
我的查询结果如下。

从我的数据表中获取列名的结果如下。

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

看起来您的模型(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;
    }
private static bool CompareFields(配置selectedConfigCount,数据表)
{
var columns=table.columns.Cast().Select(c=>c.ColumnName);
var properties=selectedConfigCount.GetType().GetProperties();
foreach(属性中的var属性)
{
var attributes=property.GetCustomAttributes(true);
foreach(属性中的var属性)
{
if(attribute.GetType()==typeof(ColumnMatchAttribute))
{
//这个属性应该进行比较
var value=property.GetValue(selectedConfigCount);
如果(值==null)
返回false;
//更改此比较以满足您的要求
如果(!columns.Any(n=>n==value.ToString())
返回false;
}
}
}
返回true;
}

Try contains in query和Datatable中的值。这是严格的比较吗?那么位置有关系吗?或者当所有的名字都在那里的时候可以吗?=@蒙珠的立场并不重要。数据表中的所有名称都必须在查询结果中。什么类型是
SelecedConfigCount
?你能通过
SeleceedConfigCount[1]
访问第二列吗?这与我想要的更接近。@LeonardoTrimarchi:我用一个代码示例更新了我的答案。这很简单,我的比较是该值应该与数据表中的列名匹配。我认为这就是您在代码中比较的内容,对吗@胡安。但是,这是一个字符串比较,所以一定要考虑病例敏感性、文化等。