1

これに夢中になる。

単純なクエリですが、機能していません。現在どのユーザーにも割り当てられていない会社単位を取得するだけです。

ID は GUID タイプです。

デバッグすると、companyUnits に 2 つのオブジェクトがあり、userCompanyUnits に 1 つのオブジェクトがあることがわかります。その 1 companyUnit (userCompanyunit には存在しない) を表示しようとしています。代わりに、結果が返されません。

クエリの何が問題なのか分かりますか? 多分私はガイドに基づいて比較することはできませんか?

var companyUnitsList = from x in companyUnits
                       where !(from c in userCompanyUnits
                               select c.CompanyUnit.Id).Contains(x.Id)
                        select x;

前もって感謝します !

4

3 に答える 3

1

以下は、Except 演算子を使用せず、カスタム IEqualityComparer を必要としない方法です。

        List<Tuple<int, string>> allUnits = new List<Tuple<int, string>>();
        allUnits.Add(new Tuple<int, string>(1, "unit1"));
        allUnits.Add(new Tuple<int, string>(2, "unit2"));
        allUnits.Add(new Tuple<int, string>(3, "unit3"));

        List<Tuple<int, string>> assignedUnits = new List<Tuple<int, string>>();
        assignedUnits.Add(new Tuple<int, string>(2, "unit2"));

        var unassigned = allUnits.Where(m => !assignedUnits.Any(asgn => asgn.Item1 == m.Item1));

//Yields unit1 and unit3
  • Item1 は Unit.ID に対応
于 2012-05-11T03:41:53.657 に答える
1

sql としてタグ付けされているので、これはクエリ可能であり、データベースに対して実行されていると想定しています。ORM と、ナビゲーション プロパティが定義されていて使用できるかどうかに応じて、次のことができます。

var notAssigned =
    from x in companyUnits
    where x.Users.Any() == false
    select x;

IOW、会社単位を割り当てられたユーザーに結び付けるために存在するナビゲーション プロパティまたはコレクションは、クエリで使用するものです (そして、SQL 'exists' に変換される可能性が最も高い)。

于 2012-05-11T03:47:15.160 に答える
1
    var list1 = from s in new String[] {"ABC1","ABC2", "ABC3", "ABC4"} select new {Field1=s,Id = Guid.NewGuid().ToString()}  ;
    var list2 = new String[] {"ABC3","ABC4", "ABC5", "ABC6"} ;


    var requiredList = (from i1 in list1
                    from i2 in list2 
                    where !i1.Field1.Contains(i2)
                    select i1).Distinct();
于 2012-05-11T03:49:31.377 に答える