簡體   English   中英

將Linq查詢結果與數組進行比較

[英]Compare Linq Query Result to Array

我有一個接受數據表的方法,我需要將數據表中的列與數據庫中的行進行比較。 我的方法看起來像這樣。

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

   }

我的查詢結果是這樣的。 在此輸入圖像描述

從我的數據表中獲取列名稱的結果是這樣的。 在此輸入圖像描述

我要做的是確保查詢中的值與數據表中的列匹配。 我該如何比較這些? 查詢的結果將始終為一行。

看起來您的模型(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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM