我正在使用类对象(clsDetails)存储播放器详细信息,如下所示。我正在尝试使用LINQ过滤具有相同值的Class对象列表。类对象列表 - 使用LINQ过滤具有相同值的类对象
我想获得所有5次尝试成功的玩家名单。我正在尝试使用LINQ,但它不会返回正确的玩家。
class Program
{
static void Main(string[] args)
{
List<clsDetails> lstAllDetails = new List<clsDetails>();
try
{
clsDetails cd;
//Player 1
cd = new clsDetails() { iAttemptId =1, sPlayerId="P1",sPlayerSuccess="YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 2, sPlayerId = "P1", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 3, sPlayerId = "P1", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 4, sPlayerId = "P1", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 5, sPlayerId = "P1", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
//Player 2
cd = new clsDetails() { iAttemptId = 1, sPlayerId = "P2", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 2, sPlayerId = "P2", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 3, sPlayerId = "P2", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 4, sPlayerId = "P2", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 5, sPlayerId = "P2", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
//Player 3
cd = new clsDetails() { iAttemptId = 1, sPlayerId = "P3", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 2, sPlayerId = "P3", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 3, sPlayerId = "P3", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 4, sPlayerId = "P3", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 5, sPlayerId = "P3", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
//Player 4
cd = new clsDetails() { iAttemptId = 1, sPlayerId = "P4", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 2, sPlayerId = "P4", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 3, sPlayerId = "P4", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 4, sPlayerId = "P4", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 5, sPlayerId = "P4", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
//Player 5
cd = new clsDetails() { iAttemptId = 1, sPlayerId = "P5", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 2, sPlayerId = "P5", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 3, sPlayerId = "P5", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 4, sPlayerId = "P5", sPlayerSuccess = "NO" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 5, sPlayerId = "P5", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
//Player 6
cd = new clsDetails() { iAttemptId = 1, sPlayerId = "P6", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 2, sPlayerId = "P6", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 3, sPlayerId = "P6", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 4, sPlayerId = "P6", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
cd = new clsDetails() { iAttemptId = 5, sPlayerId = "P6", sPlayerSuccess = "YES" };
lstAllDetails.Add(cd);
//players successfull in first attempt itself
var vSuccessFirstAttempt = (from d in lstAllDetails
where d.sPlayerSuccess.ToUpper() == "YES" && d.iAttemptId == 1
select d.sPlayerId);
//Players successfull in all the 5 attempts
var vSuccessAllAttempts = (from d in lstAllDetails
group d by new {d.sPlayerId,d.sPlayerSuccess} into grp
where grp.Count() ==1 && grp.Key.sPlayerSuccess =="YES"
select grp.Key.sPlayerId);
// vSuccessAllAttempts - Enumeration yielded No result
}
catch (Exception ex)
{
}
}
}
public class clsDetails
{
public int iAttemptId = 0;
public string sPlayerId = string.Empty;
public string sPlayerSuccess = string.Empty;
}
我也想
的球员谁在第一次尝试是成功本身
球员的名单谁是成功的在第一或第二次尝试列表
至少3次尝试成功的玩家列表。
的球员谁在所有的5次尝试
是成功的名单,我不知道什么是与下面的查询,以及为什么它不返回任何值的问题。
var vSuccessAllAttempts = (from d in lstAllDetails
group d by new {d.sPlayerId,d.sPlayerSuccess} into grp
where grp.Count() ==1 && grp.Key.sPlayerSuccess =="YES"
select grp.Key.sPlayerId);
感谢 阿肖克
非常感谢,现在工作正常。 – user3219354 2015-03-02 09:56:21
非常感谢,现在工作正常。 – user3219354 2015-03-02 09:56:21
如果它帮助你,请考虑接受这个答案。 – stefankmitph 2015-03-02 10:04:09