1

次の2つの機能+ 1が進行中です。

    public static IEnumerable<LockedDate> GetAllByEmployee(int employeeID)
    {
        var v = LockedDates.GetAll();
        return from p in v where p.EmployeeID == employeeID select p;
    }

    public static IEnumerable<LockedDate> GetAllByCompany()
    {
        var v = LockedDates.GetAll();
        return from p in v where p.EmployeeID == null select p;
    }

    public static List<LockedDate> GetAllForEmployee(int employeeID)
    {
        var empList = GetAllByEmployee(employeeID);
        var compList = GetAllByCompany();
        //What do???
        return from p in empList and from q in compList where p and q are not duplicate . toList()
    }

これらは LINQ-SQL を使用します。

LockedDate には Date と IsYearly bool があります。IsYearly が true の場合、年は考慮されません。時間は決して考慮されるべきではありません。

ここで、従業員が持っているすべての LockedDates と会社の LockedDates を、重複することなく 1 つのリストに含める関数が必要です。したがって、IsYearly && dd/mm が == または !IsYearly && dd/mm/yyyy が == の場合、重複があります。これを行うための効率的で単純でない方法は何でしょうか?

ありがとう

4

2 に答える 2

1
var yearly = source.Where(p => p.IsYearly)
                   .GroupBy(p => new { Month = p.Date.Month, Day = p.Date.Day })
                   .Select(g => g.First());
var nonYearly = source.Where(p => !p.IsYearly)
                      .GroupBy(p => p.Date.Date)
                      .Select(g => g.First());

return yearly.Union(nonYearly).ToList();

source方法で簡単に行うことができますUnion

var source = GetAllByEmployee(employeeID).Union(GetAllByCompany());
于 2013-03-14T14:23:35.773 に答える
0

あなたはこれをすることができますか

    var v = LockedDates.GetAll();
    return from p in v where p.EmployeeID == null || p.EmployeeID == employeeID select p;
于 2013-03-14T14:22:28.043 に答える