1

質問があります。

linq で複数の列の値を持つ 1 つの文字列を返すことは可能ですか??

このような

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 に答える