1

次のようなテーブルがあります:
キー日付...名前...ステータス...
(ID)5月...
(ID)5月...
(ID)5月...
(ID)6月...
( ID)6月...
(ID)6月...
(ID)7月...
(ID)7月..。

私が必要としているのは、エンティティを太字で示していることです。これは、セットの全体的なプロパティです。したがって、次のようになります。

(ID)5月...
(ID)6月...
(ID)7月..。

エンティティセットは次のコマンドで取得されます。

var status = from a in ObjectContext.InspectionReadings
                     where a.InspectionID == new Guid(inspID)
                     && a.DateTaken > before
                     && a.DateTaken <= DateTime.Now
                     orderby a.DateTaken descending, a.Status descending
                     select a;

今、私は私が望まないものを除外する必要があります。

これどうやってするの?

ありがとうございました

4

3 に答える 3

2

group by句を使用する必要があります...

var status = from a in ObjectContext.InspectionReadings
             where a.InspectionID == new Guid(inspID)
             && a.DateTaken > before
             && a.DateTaken <= DateTime.Now
             group a by a.DateTaken.Month into g
             from m in g
             select new 
             {
               g.Key, g.OrderBy(x => x.DateTaken).First()
             };
于 2012-07-03T16:18:14.583 に答える
2

これは、GroupByへの呼び出しだけでなく、への呼び出しでも実行できFirstます。

たとえば、元のクエリが与えられた場合、次のstatusことができます。

var firstStatuses = 
    status.GroupBy(i => i.DateTaken).Select(g => g.First());

基になるデータベースのselect句の要件に基づいて、LINQ-to-Entitiesがデータを適切にグループ化できない場合があることに注意してください。

これにより、いつでも呼び出しAsEnumerableて、メモリ内のオブジェクトに対してクエリを強制的に実行できます。

var firstStatuses = 
    status.AsEnumerable().GroupBy(i => i.DateTaken).Select(g => g.First());

注意点として、返品するアイテムに応じて、各グループを注文する必要があります(まだ正しく注文されていない場合)。

于 2012-07-03T16:18:35.587 に答える
2

DateTakenフィールドのみを参照するIEqualityComparerを記述してから、次のようにDistinct()を使用できます。

public class DateTakenComparer : IEqualityComparer<InspectionReading>
{
    public bool Equals(InspectionReading x, InspectionReading y)
    {
        return x.DateTaken == y.DateTaken;
    }

    public int GetHashCode(InspectionReading obj)
    {
        return obj.GetHashCode();
    }
}

その後:

var statuses = ObjectContext.InspectionReadings
    .Distinct(new DateTakenComparer())
    .OrderByDescending(x => x.DateTaken)
    .ToList();
于 2012-07-03T16:35:31.243 に答える