11

LINQ で特定の州の従業員数を取得しようとしています。

私はこのようなものを持っています:

States
     |
     Cities
          |
          Posts
              |
              Employees

Employees選択した手でカウントを取得するにはどうすればよいStateですか?

私のエンティティは次のとおりです。

public class Province : EntityBase
{
    public String ProvinceName { get; set; }
    public virtual IList<City> Cities { get; set; }
}

public class City : EntityBase
{
    public String CityName { get; set; }

    public virtual Province Province { get; set; }
    public virtual IList<Post> ElectricPosts { get; set; }
}

public class Post : EntityBase
{
    public String PostName { get; set; }
    public virtual City City { get; set; }
    public virtual IList<Employee> Employees { get; set; }
}

public class Employee : Person
{
    public virtual String FirstName { get; set; }
    public virtual String SureName { get; set; }
    public virtual Post ElectricPost { get; set; }
}

編集:Posts興味深いのは、問題や例外なくカウントを取得できることですが、@HamletHakobyan の投稿で方法を試したいときに取得NullReferenceExceptionしていて、理由がわかりません。

4

8 に答える 8

12

よくわかりませんが、これを試してください:

var state = ((IObjectContextAdapter)context)
            .ObjectContext
            .CreateObjectSet<Province>("States") as ObjectQuery<Province>;
            // States is entitySetName

int count = state.Cities.Include("ElectricPosts.Employees")
                    .SelectMany(c => c.Posts)
                    .SelectMany(p => p.Employees)
                    .Count();
于 2013-01-22T14:09:33.987 に答える
5

これには、LINQ to EntitiesSumCountメソッドを使用できます。

int count = db.States
  .Where( state => state.StateId == X )
  .Sum( state => state.Cities
    .Sum( city => city.Posts
      .Sum( post.Employees.Count() )
    )
  )
;
于 2013-01-22T14:12:53.340 に答える
2
var q = from emp in dc.Employees
    from post in dc.Posts
    from city in dc.Cities
    from state in dc.States
    where emp.PostID == post.ID
    && post.CityID == city.ID
    && city.StateID == state.ID
    && state.Name == "Tehran"
    select emp;

または単に

var q = from emp in dc.Employees
    where emp.Post.City.State.Name == "Tehran"

qはその州の従業員のリストであり、簡単に数えることができます (数え方はご存知だと思います)。

于 2013-01-22T14:06:15.587 に答える
1

その4つのLinqをくっつける方法を見つけることができなかったので、私があなたを正しく理解していれば、これはあなたの問題に対する私の解決策になるでしょうが、おそらくあなたはこれを行うことができます

ちなみに、オプションが必要な場合は、このリンクを参照してください

        var list = new List<Province>();

        string sProvinceName = "";
        string sCityName = "";
        string sPostName = "";
        string sEmployeeFirstName = "";
        string sEmployeeSureName = "";


        var iListListcitys = from province in list
                             where province != null
                             where province.Cities != null
                             where province.ProvinceName == sProvinceName
                             select province.Cities;

        var iListListposts = from icitys in iListListcitys
                             from city in icitys
                             where city != null
                             where city.ElectricPosts != null
                             where city.CityName == sCityName
                             select city.ElectricPosts;

        var iListListEmployees = from posts in iListListposts
                                 from post in posts
                                 where post != null
                                 where post.Employees != null
                                 where post.PostName == sPostName
                                 select post.Employees;

        var listEmployees = from employees in iListListEmployees
                            from employee in employees
                            where employee != null
                            where employee.FirstName == sEmployeeFirstName || employee.SureName == sEmployeeSureName
                            select employee;

        var count = listEmployees.Count();
于 2013-02-08T15:33:24.667 に答える
0
var cites = (from s in _db.Province where s.ProvinceName == 'name' select s.Cities);
int count = (from p in _db.Posts
         where city.Contains(p.City)
         select p.Employees).Count();
于 2013-02-11T06:10:13.477 に答える
0

これを試して:

Province province = ...;
int count = province.Cities.Include(c => c.Posts.Select(p => p.Employees))
    .Where(c => c != null)
    .SelectMany(c => c.Posts)
    .Where(p => p != null)
    .SelectMany(p => p.Employees)
    .Where(e => e != null)
    .Count();

.Where次に、句を 1 つずつ削除して、問題のある場所を見つけます。

joinsも使用できます。

int count = (from c in province.Cities
             join p in db.Posts on c equals p.City
             join e in db.Employees on p equals e.ElectricPost
             select e).Count();
于 2013-02-10T20:56:53.917 に答える
0
db.States.Where(p => p.yourcondition == whatever).Cities.Posts.Employees.Count()
于 2013-01-22T14:06:17.820 に答える