StudentSC Ответов: 2

Как сравнить datatable в entity C#?


Как сравнить разные базы данных с одним и тем же столбцом?

Что я уже пробовал:

var t1= dbcontext.entities.Person(branchcode,countrycode).tolist();
//db change code
var t1= dbcontext.entities.Student(branchcode,countryclde).tolist();

varcommon=t1.Intersect(t2);

F-ES Sitecore

Если ваш вопрос заключается в том, как подключить "dbcontext" к другой базе данных, то вы можете передать строку подключения в целевую базу данных при создании класса

dbcontext = new DbContext("строка подключения здесь")

2 Ответов

Рейтинг:
2

Slacker007

Это то, что я использовал в прошлом для сравнения двух сущностей, независимо от базы данных, если они имеют одинаковые имена столбцов и таблиц.

Он возвращает столбцы с разными значениями (например, старые и новые значения)

Примечание: множество примеров этого в интернете, с различными вариациями и т. д.

 public static List<PropertyInfo> CompareTo<T>(this T entityA, T entityB ) where T : class 
{
    var propertyInfoDifferences = new  List<PropertyInfo>();

    if(entityA == null || entityB == null) return propertyInfoDifferences;
    if (entityA.GetType().Name != entityB.GetType().Name) return propertyInfoDifferences;

    var properties = entityA.GetType().GetProperties();

    foreach (var propertyInfo in properties)
    {
        if (propertyInfo == null) continue;

        var entityAProperty = entityA.GetType().GetProperty(propertyInfo.Name);
        var entityBProperty = entityB.GetType().GetProperty(propertyInfo.Name);

        if(entityAProperty == null || entityBProperty == null) continue;

        var entityAPropertyValue = entityAProperty.GetValue(entityA);
        var entityBPropertyValue = entityBProperty.GetValue(entityB);

        if (entityAPropertyValue == null && entityBPropertyValue == null) continue;

        string entityAStringValue = null;
        string entityBStringValue = null;

        if (entityAPropertyValue != null)
        {
            entityAStringValue = entityAPropertyValue.ToString();
        }

        if (entityBPropertyValue != null)
        {
            entityBStringValue = entityBPropertyValue.ToString();
        }

        if (entityAStringValue != entityBStringValue)
        {
            propertyInfoDifferences.Add(propertyInfo);
        }
    }

    return propertyInfoDifferences;
}


Реализация может быть примерно такой:

List<PropertyInfo> propertyDiffs = entityA.CompareTo(entityB);


Рейтинг:
0

Aydin Homay

Привет,

Если ваши списки t1 и t2 являются списком строк, то это так просто, что вы можете сделать это таким образом:

var t1= dbcontext.entities.Student(branchcode,countrycode).tolist();
//db change code
var t1= dbcontext.entities.Student(branchcode,countryclde).tolist();

IEnumerable<string> differenceQuery =  
          t1.Except(t2);


если нет, то лучше сначала переопределить метод equals или изменить свой запрос linq, чтобы быть более точным.

Другой пример можно найти в :
Как найти заданную разницу между двумя списками (LINQ) (C#)

Иди здесь более сложный пример.

Если это не решило вашу проблему, то, пожалуйста, оставьте комментарий, и я помогу Вам улучшить свое решение, пока ваша проблема не будет решена.

Овации,
АХ