我有一个查询。
是否可以在linq中返回一个具有多个列值的字符串?
喜欢这个
string ProductName = ((from P in DataModel.DIS_PRODUCT
join M in DataModel.SET_PACK_UNIT on P.PUNIT_ID equals M.ID
where P.PRODUCT_ID == ProdictId
select P.PRODUCT_NAME +" " + P.WEIGHT + " "+ M.UNIT_SYMBLE)
.Take(1)
).ToString();
答案 0 :(得分:2)
您正在使用Take(1)
,这意味着您仍然可以获得IEnumerable<string>
或IQueryable<string>
。只需使用First()
(或可能是FirstOrDefault()
)代替Take(1)
,您也可以放弃ToString()
来电。
string productName = (from P in DataModel.DIS_PRODUCT
join M in DataModel.SET_PACK_UNIT
on P.PUNIT_ID equals M.ID
where P.PRODUCT_ID == ProdictId
select P.PRODUCT_NAME + " " + P.WEIGHT + " "+ M.UNIT_SYMBLE)
.FirstOrDefault();
仅当您的LINQ提供程序支持字符串连接操作时才会起作用。另一种方法是只获取所需的列,然后在调用者处连接:
var query = from P in DataModel.DIS_PRODUCT
join M in DataModel.SET_PACK_UNIT
on P.PUNIT_ID equals M.ID
where P.PRODUCT_ID == ProdictId
select new { P.PRODUCT_NAME, P.WEIGHT, M.UNIT_SYMBLE };
var result = query.FirstOrDefault();
if (result != null)
{
string productName = result.PRODUCT_NAME + " " +
result.WEIGHT + " " +
result.UNIT_SYMBLE;
// Use the name
}
else
{
// No results
}
答案 1 :(得分:1)
另一个更明确的方法是以下
var ProductsQueryItem = (from p in Products
select new
{
Name = e.ProductName+ " " + e.weight +e.UNIT_SYMBLE
})
.FirstOrDefault();
现在您可以直接使用ProductsQueryItem .Name