1

我有一个查询。

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

2 回答 2

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
}
于 2013-01-23T08:31:34.197 回答
1

另一种更清晰的方法如下

var ProductsQueryItem = (from p in Products
              select new
              {
                  Name = e.ProductName+ " " + e.weight +e.UNIT_SYMBLE
              })
.FirstOrDefault();

现在您可以直接使用 ProductsQueryItem .Name

于 2013-11-28T01:11:38.563 回答