我有以下查询,可以完美地提取我需要的数据。
var subFuncName = from a in m_dcSQL_ConnectionProdTest.DC3_SubFunctions
where a.VersionIndex == versionIndex && stepDistinct.Select(b => b.Step).Contains(a.FunctionNumber) && stepDistinct.Select(c => c.LogID).Contains(a.SubFunctionNumber)
select new
{
a.FunctionNumber,
a.SubFunctionNumber,
a.SubFunctionName,
};
然后我想将一些数据添加到列表中。
foreach (var item in stepDistinct)
{
lstPareto.Add(new clsPareto(Convert.ToInt32(item.Step), Convert.ToInt32(item.LogID),
stepLogID.Where(p => p.Step.Equals(item.Step) && p.LogID.Equals(item.LogID)).Count(),
subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID)).Select(x => x.SubFunctionName).ToString())); --THIS LINE IS THE PROBLEM--
}
我的clsPareto课程:
public class clsPareto
{
public int intStep { get; set; }
public int intLogID { get; set; }
public int iCount { get; set; }
public string strFuncName { get; set; }
public clsPareto(int ParetoStep, int ParetoLogID, int Count, string FuncName)
{
intStep = ParetoStep;
intLogID = ParetoLogID;
iCount = Count;
strFuncName = FuncName;
}
}
我想要做的是从subFuncName中提取每个SubFunctionName,其中FunctionNumber = Step和SubFunctionNumber = LogID。但是,当我将它绑定到我的数据网格时,用于显示名称的列只显示SQL查询字符串而不实际采用我想要的元素。我以为我的.Select(x => x.SubFunctionName)
可以做到这一点,但显然它没有。使用LINQ和C#还是一个新手,那么我该如何做呢?
答案 0 :(得分:1)
问题行的linq仍然是一个表达式 - Select()
返回IEnumerable
而不是值 - 然后你正在对其进行ToString()
。这就是你回来的原因。
您需要解析表达式并从中获取实际对象。添加Single()
以获取FuncName应该这样做。如果FuncName已经是:
subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID))
.Select(x => x.SubFunctionName).Single().ToString()));
答案 1 :(得分:0)
如果集合中没有匹配的元素,此解决方案将抛出异常。
subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID))
.Select(x => x.SubFunctionName).Single().ToString()));
可以使用;
var subFuncName = subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID))
.Select(x => x.SubFunctionName).FirstOrDefault());
if(subFuncName != null)
// Add it
else
subFuncName == "UNDEFINED";
并且如果subFuncName自己为null,则处理该案例。