返回一个具有多列值linq的字符串

时间:2013-01-23 08:24:44

标签: c# linq

我有一个查询。

是否可以在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();

2 个答案:

答案 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