C# 从查询中选择单个对象
我有下面的查询,可以很好地提取我需要的数据C# 从查询中选择单个对象,c#,linq,C#,Linq,我有下面的查询,可以很好地提取我需要的数据 var subFuncName = from a in m_dcSQL_ConnectionProdTest.DC3_SubFunctions where a.VersionIndex == versionIndex && stepDistinct.Select(b => b.Step).Contains(a.FunctionNumber) && stepDistinct
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中提取每个子FunctionName,其中FunctionNumber=Step和SubFunctionNumber=LogID。但是,当我将其绑定到datagrid时,用于显示名称的列只显示SQL查询字符串,实际上并不包含我想要的元素。我原以为我的.Selectx=>x.SubFunctionName可以做到这一点,但显然不行。对于使用LINQ和C来说还是很新的,那么我该怎么做呢?问题行的LINQ仍然是一个表达式-Select返回一个IEnumerable而不是值-然后您要对它执行ToString。这就是为什么要恢复SQL 您需要解析表达式并从中获取实际对象。添加以获取FuncName应该可以做到这一点。如果FuncName已经是,则可能不需要转换为字符串:
subFuncName.Where(x => x.FunctionNumber.Equals(item.Step) && x.SubFunctionNumber.Equals(item.LogID))
.Select(x => x.SubFunctionName).Single().ToString()));
如果集合中没有匹配的元素,此解决方案将引发异常
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为空,你自己来处理这个问题。好吧,这太简单了,哈哈。非常感谢Rhumborl的快速回答,它现在正在按它应该的方式工作!