linq to sql (C#)을 사용하여 관련없는 두 테이블의 결합 된 결과를 표시하는 가장 좋은 방법을 찾기 위해 고심하고 있습니다. 테이블은 EmailAlerts 및 TextAlerts이며 각각 UserName, Type 및 Status (다른 열은 다르지만이 쿼리에는이 세 가지만 필요함)가 있습니다. 보고 목적으로 시스템에 활성 경고가있는 사용자의 스냅 샷을 가져와야합니다.관련없는 테이블 (linq에서 sql)에서 결합 된 결과 표시
예 테이블 : 예제 테이블이 CSV 파일에 넣어됩니다
EmailAlerts
UserName Type Status
Alice 1 0
Alice 1 0
Alice 1 1
Alice 2 0
Alice 2 1
Alice 2 1
Bob 1 1
Bob 2 1
Mallory 1 1
Mallory 2 1
TextAlerts
UserName Type Status
Alice 1 1
Alice 2 0
Alice 2 1
Bob 1 0
Mallory 1 1
Mallory 2 1
, 최종 결과는 다음과 같아야합니다 : 그래서
Username, ActiveType1Email, ActiveType2Email, ActiveType1Text, ActiveType2Text
Alice, Yes, Yes, No, Yes
Bob, No, No, Yes, No
, 각각의 고유 한 사용자에 대해, 두 유형 중 하나의 활성 (상태 = 0) 전자 메일 또는 텍스트 경고가 있는지 확인하십시오. 두 유형 모두에 대해 여러 개의 경고를 가질 수 있습니다. 사용자는 Sitecore에 저장되므로 사용자 테이블은 없습니다.
지금은 모든 고유 사용자 이름을 먼저 얻은 다음 각 사용자 이름을 통해 반복적으로 알리미를 확인합니다. 그것은 효과가 있지만 꽤 끔찍해서 더 나은 해결책을 찾고 싶습니다. 하나의 쿼리로 모든 것을 수행 할 수 있습니까? 저장 프로 시저가 더 좋은 방법일까요? 누구든지 올바른 방향으로 나를 가리킬 수 있다면 코드를 직접 이해할 수 있습니다. 가장 좋은 방법을 생각해 볼 수는 없습니다.
UPDATE : 그것은 당신에게 아이디어를 줄 수있는 어떤 경우
public static List<Dictionary<string, string>> GetUserAlertsForCSV()
{
List<Dictionary<string, string>> alerts = new List<Dictionary<string, string>>();
var usernames = ((from e in db.EmailAlerts select e.UserName).Union
(from t in db.TextAlerts select t.UserName)).Distinct();
foreach (var username in usernames)
{
Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("username", username);
bool hasActiveAlert = false;
var activeType1Email = (from e in db.EmailAlerts
join a in db.AlertStatusCodes on e.Status equals a.StatusCode
where e.UserName == username
&& e.Type == (int)AlertType.Type1
&& a.Description == "active"
select e).FirstOrDefault();
if (activeType1Email != null)
{
d.Add("type1email", "Yes");
hasActiveAlert = true;
}
else
{
d.Add("type1email", "No");
}
// repeat the above for activeType1Text, activeType2Email and activeType2Text
if (hasActiveAlert)
{
alerts.Add(d);
}
}
return alerts;
}
감사합니다,
Annelie
달성하고자하는 코드를 보여 주시겠습니까? 힌트를 줄 수 있습니까? 이 방법은 목표가 명확하지 않습니다. – TheBoyan
@bojanskr - 예제 테이블을 추가하고, 지금까지 가지고있는 SQL 코드에 linq를 추가했지만 경고를받습니다. :) – annelie
아무런 문제가 없다. 단지 비판하지 않고 돕고 싶다. – TheBoyan