2

私はlinqが初めてで、助けが必要です。これらは私のpocoクラスです:

public class User {
   public User()
   {
      this.Profiles = new List<Profile>();
   }

   public Guid ID { get; set; }        
   public bool IsValid{ get; set; }       
   public virtual ICollection<Profile> Profiles { get; set; }
}

public class Profile {
   public Profile() {
      this.Users = new List<User>();
      this.Customers = new List<Customer>();
   }

   public Guid ID { get; set; }
   public string Name { get; set; } 
   public virtual ICollection<User> Users { get; set; }
   public virtual ICollection<Customer> Customers { get; set; }
}

public class Customer {
   public Customer()
   {
      this.Profiles = new List<Profile>();
   }

 public Guid ID { get; set; }
 public string Number { get; set; }       
 public virtual ICollection<Profile> Profiles { get; set; }
}

特別な顧客を持つ有効なユーザーを検索したいと思います。特別な顧客は別のユーザーから来ます。したがって、別のユーザーをメソッド引数として送信します。

linq でも可能ですか、それとも問題を解決するためにストアド プロシージャが必要ですか?

よろしくお願いします

4

2 に答える 2

1

これを試すことができます:

public static List<User> FindAllUsersBySameCustomers(User sourceuser)
{
    var res = sourceuser.Profiles.SelectMany(p => p.Customers)
                                 .SelectMany(c => c.Profiles)
                                 .SelectMany(p => p.Users)
                                 .Distinct();
    return res.ToList();
}

ただし、ここの例のように関係が設定されている (含まれている) 場合にのみ機能することに注意してください。

ノート

コンストラクター内で仮想メンバーを呼び出さないでください。答えはここにあります SO:コンストラクターでの仮想メンバー呼び出し

于 2013-01-17T22:09:25.127 に答える
0

これを試して..

/// <summary>
    /// Search for valid Users with special customers. 
    /// Special customers would come from another user. 
    /// So I would send another user as method argument.
    /// </summary>
    /// <returns></returns>
    public List<User> FindValidUsersWithSpecialCustomers(List<User> allUsers, User anotherUser)
    {   
        var specialCustomers = anotherUser.Profiles.SelectMany(aProfile => aProfile.Customers);//.Select(cust => cust.Number == "SpecialCustomerNumber" && cust.ID == new Guid("SpecialCustomerGuid"));

        Func<IEnumerable<Customer>, IEnumerable<Customer>, Boolean> IsSpecialCustomersPresentInThisCustomersList =
            delegate(IEnumerable<Customer> customerList, IEnumerable<Customer> specialCustomersList)
            {
                if ((from cust in customerList where specialCustomersList.Contains(cust) select cust).Any())
                    return true;
                else
                    return false;
            };

        var validUsersWithSpecialCustomers = (from user in allUsers where user.IsValid && IsSpecialCustomersPresentInThisCustomersList(user.Profiles.SelectMany(p => p.Customers), specialCustomers) select user);

        return validUsersWithSpecialCustomers.ToList();
    }
于 2013-01-18T06:26:33.077 に答える